Jak uruchomić skrypt danych użytkownika EC2 ponownie podczas uruchamiania?

19

Po uruchomieniu przez Cloud-init skryptu danych użytkownika przy pierwszym uruchomieniu instancji EC2 plik stanu jest prawdopodobnie zapisywany, aby Cloud-init nie uruchomił ponownie tego skryptu przy kolejnych uruchomieniach. Są przypadki, w których chciałbym usunąć ten plik stanu, aby skrypt danych użytkownika został ponownie uruchomiony. Gdzie to jest?

Mikrofon
źródło

Odpowiedzi:

24

rm /var/lib/cloud/instances/*/sem/config_scripts_user

Potwierdzono pracę nad:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Ze względu na kompletność, jeśli masz sytuację, w której chcesz śledzić fakt / możliwość, że ten AMI [miał nadrzędny AMI, który ...] i wszystkie one uruchomiły cloud-initdane użytkownika, możesz usunąć tylko bieżący semafor.

rm /var/lib/cloud/instance/sem/config_scripts_user

Mikrofon
źródło
2
Szybko się zorientowałeś.
c24w
9
@ c24w Te znaczniki czasu wprowadzają w błąd. Właściwie zajęło mi to kilka godzin badań i testów, więc kiedy to rozgryzłem, stworzyłem to pytanie, aby pomóc kolejnej osobie szukającej ostatecznej odpowiedzi.
Mike
1
Natknąłem się na to od tamtej pory i nie zdawałem sobie sprawy, że zachęcono mnie do publikowania pytań i odpowiedzi typu wiki. Dziękujemy za udokumentowanie tego!
c24w
1
Cieszę się, że zachęca to do wystąpienia błędu serwera. Widziałem to wielokrotnie krytykowane na SO
szczerze,
1
@ flag5 To, curlże usługa metadanych, aby uzyskać identyfikator bieżącej instancji, jest niepotrzebna, ponieważ /var/lib/cloud/instancejest już dowiązaniem symbolicznym do bieżącej instancji /var/lib/cloud/instances. :-)
Mike,
2

Możesz umieścić swój skrypt w /etc/rc.local, który uruchomi skrypt przy każdym ponownym uruchomieniu.

Pratik Singhal
źródło
/etc/rc.localnie ma nic wspólnego z danymi użytkownika EC2.
Mike
@MikeConigliaro Chciałem użyć danych użytkownika, aby coś działało przy każdym rozruchu, więc skrypt danych użytkownika dołączyłem go do /etc/rc.local.
user253751
0

Możesz również skonfigurować dane użytkownika, aby były uruchamiane przy każdym rozruchu, zamiast usuwać plik stanu. Musisz użyć cloud_final_modulesw swoim skrypcie danych użytkownika, aby ponownie uruchomić skrypt użytkownika, i w tym celu musisz dostosować uderdata, aby mieć wiele plików w danych użytkownika. Przykładowy plik danych użytkownika wygląda następująco:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/userdata-test.txt
--//

Spowoduje to, że skrypt danych użytkownika zostanie wykonany na ostatnim etapie każdego procesu rozruchu. Tutaj bin/echo "Hello World" >> /tmp/userdata-test.txtnależy wykonać tylko jedną linię , zamień ją na skrypt powłoki, który musi być wykonywany przy każdym uruchomieniu komputera.

Hardeep Singh
źródło