Bagaimana cara membuat skrip data pengguna EC2 dijalankan kembali saat startup?

19

Setelah cloud-init menjalankan skrip data pengguna pada boot pertama instance EC2, file state mungkin ditulis sehingga cloud-init tidak akan menjalankan skrip lagi pada reboot berikutnya. Ada kasus di mana saya ingin menghapus file status ini sehingga skrip data pengguna akan berjalan kembali. Dimana itu?

Mike
sumber

Jawaban:

24

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

Dikonfirmasi sedang mengerjakan:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Demi kelengkapan, jika Anda memiliki situasi di mana Anda ingin melacak fakta / kemungkinan bahwa AMI ini [memiliki AMI induk yang ...] dan mereka semua menjalankan cloud-initdata pengguna, Anda hanya dapat menghapus semafor saat ini.

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

Mike
sumber
2
Anda tahu itu dengan cepat.
c24w
9
@ c24w Stempel waktu itu menyesatkan. Sebenarnya saya perlu beberapa jam penelitian dan pengujian, jadi setelah saya menemukan jawabannya, saya membuat pertanyaan ini untuk membantu orang berikutnya mencari jawaban yang pasti.
Mike
1
Saya sudah menemukan ini sejak dan tidak menyadari itu didorong untuk mengirim Q & As tipe wiki. Hargai Anda mendokumentasikan ini!
c24w
1
Saya senang ini didorong di serverfault. Saya sudah melihatnya berkali-kali turun di SO
jujur
1
@ flag5 Bahwa curlke layanan metadata untuk mendapatkan id instance saat ini tidak perlu karena /var/lib/cloud/instancesudah menjadi symlink ke instance saat ini di bawah /var/lib/cloud/instances. :-)
Mike
2

Anda dapat meletakkan skrip Anda di /etc/rc.local, yang akan menjalankan skrip di setiap reboot.

Pratik Singhal
sumber
/etc/rc.localtidak ada hubungannya dengan data pengguna EC2.
Mike
@MikeConigliaro Saya ingin menggunakan data pengguna untuk membuat sesuatu berjalan pada setiap boot, jadi saya membuat skrip data pengguna menambahkannya ke /etc/rc.local.
user253751
0

Anda juga dapat mengonfigurasi data pengguna Anda untuk dijalankan kembali pada setiap boot, alih-alih menghapus file status. Anda harus menggunakan cloud_final_modulesskrip data pengguna Anda untuk menjalankan kembali skrip data pengguna dan untuk itu Anda harus menyesuaikan uderdata agar memiliki beberapa file dalam data pengguna. Contoh file data pengguna akan seperti:

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
--//

Ini akan membuat skrip data pengguna untuk dieksekusi pada langkah terakhir dari setiap proses boot. Di sini hanya satu baris yang bin/echo "Hello World" >> /tmp/userdata-test.txtharus dieksekusi, ganti ini dengan skrip shell Anda yang perlu dijalankan setiap kali mesin di-boot.

Hardeep Singh
sumber