GNU/Linux >> Belajar Linux >  >> Linux

skrip data pengguna (cloud-init) tidak dijalankan di EC2

Cloud-init tidak menerima skrip bash biasa, begitu saja. Ini adalah monster yang memakan file YAML yang menentukan instance Anda (paket, kunci ssh, dan hal lainnya).

Dengan menggunakan MIME, Anda juga dapat mengirim skrip shell arbitrer, tetapi Anda harus menyandikannya dengan MIME.

$ cat my-boothook.txt
#!/bin/sh
echo "Hello World!"
echo "This will run as soon as possible in the boot sequence"

$ cat my-user-script.txt
#!/usr/bin/perl
print "This is a user script (rc.local)\n"

$ cat my-include.txt
# these urls will be read pulled in if they were part of user-data
# comments are allowed.  The format is one url per line
http://www.ubuntu.com/robots.txt
http://www.w3schools.com/html/lastpage.htm

$ cat my-upstart-job.txt
description "a test upstart job"
start on stopped rc RUNLEVEL=[2345]
console output
task
script
echo "====BEGIN======="
echo "HELLO From an Upstart Job"
echo "=====END========"
end script

$ cat my-cloudconfig.txt
#cloud-config
ssh_import_id: [smoser]
apt_sources:
 - source: "ppa:smoser/ppa"

$ ls
my-boothook.txt     my-include.txt      my-user-script.txt
my-cloudconfig.txt  my-upstart-job.txt

$ write-mime-multipart --output=combined-userdata.txt \
   my-boothook.txt:text/cloud-boothook \
   my-include.txt:text/x-include-url \
   my-upstart-job.txt:text/upstart-job \
   my-user-script.txt:text/x-shellscript \
   my-cloudconfig.txt

$ ls -l combined-userdata.txt 
-rw-r--r-- 1 smoser smoser 1782 2010-07-01 16:08 combined-userdata.txt

gabungan-userdata.txt adalah file yang ingin Anda tempel di sana.

Info lebih lanjut di sini:

https://help.ubuntu.com/community/CloudInit

Perhatikan juga, ini sangat tergantung pada gambar yang Anda gunakan. Tapi Anda mengatakan itu benar-benar gambar berbasis cloud-init, jadi ini berlaku. Ada inisiator cloud lain yang tidak bernama cloud-init - maka bisa saja berbeda.


Ini sudah berumur beberapa tahun sekarang, tetapi untuk keuntungan orang lain saya memiliki masalah yang sama, dan ternyata cloud-init berjalan dua kali, dari dalam /etc/rc3.d . Menghapus file-file ini di dalam folder memungkinkan data pengguna berjalan dengan benar:

lrwxrwxrwx  1 root root   22 Jun  5 02:49 S-1cloud-config -> ../init.d/cloud-config
lrwxrwxrwx  1 root root   20 Jun  5 02:49 S-1cloud-init -> ../init.d/cloud-init
lrwxrwxrwx  1 root root   26 Jun  5 02:49 S-1cloud-init-local -> ../init.d/cloud-init-local

Sebenarnya, cloud-init mengizinkan satu skrip shell sebagai masukan (meskipun Anda mungkin ingin menggunakan arsip MIME untuk penyiapan yang lebih kompleks).

Masalah dengan skrip OP adalah baris pertama salah. Anda harus menggunakan sesuatu seperti ini:

#!/bin/sh

Alasannya adalah, sementara cloud-init menggunakan #! untuk mengenali skrip pengguna, sistem operasi membutuhkan garis shebang lengkap untuk mengeksekusi skrip.

Jadi apa yang terjadi dalam kasus OP adalah cloud-init berperilaku dengan benar (yaitu mengunduh dan mencoba menjalankan skrip) tetapi sistem operasi tidak dapat benar-benar menjalankannya.

Lihat:Shebang (Unix) di Wikipedia


Linux
  1. Bisakah Skrip Dapat Dieksekusi Tetapi Tidak Dapat Dibaca?

  2. Ssh – Skrip Untuk Mengotomatiskan Scp Dalam Jaringan?

  3. Kesalahan Dalam Script Hitung Untuk Jumlah Kejadian?

  1. Variabel Curl Outfile Tidak Bekerja Dalam Skrip Bash?

  2. Spasi Untuk Variabel Dalam Skrip Bash?

  3. Cron Job Tidak Dijalankan?

  1. nohup:perintah tidak ditemukan

  2. Baris shebang Ubuntu Python tidak berfungsi

  3. file_put_contents tidak membuat file txt