GNU/Linux >> Linux の 問題 >  >> Linux

user-data (cloud-init) スクリプトが EC2 で実行されない

Cloud-init はプレーンな bash スクリプトを受け入れません。インスタンスを定義する YAML ファイル (パッケージ、ssh キー、その他のもの) を食べる獣です。

MIME を使用すると、任意のシェル スクリプトを送信することもできますが、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

結合された userdata.txt は、そこに貼り付けたいファイルです。

詳細はこちら:

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

また、これは使用している画像に大きく依存することに注意してください。しかし、それは本当にcloud-initベースのイメージだとおっしゃっているので、これが当てはまります。 cloud-init という名前が付いていない他のクラウド イニシエータがあります - その場合は異なる可能性があります。


これは数年前のものですが、他の利益のために同じ問題があり、/etc/rc3.d 内から cloud-init が 2 回実行されていることが判明しました。 .フォルダ内のこれらのファイルを削除すると、ユーザーデータが正しく実行されるようになりました:

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

実際、cloud-init は単一のシェル スクリプトを入力として許可します。 (ただし、より複雑なセットアップには MIME アーカイブを使用することもできます)。

OP のスクリプトの問題は、最初の行が正しくないことです。次のようなものを使用する必要があります:

#!/bin/sh

この理由は、cloud-init が #! を使用している間、 ユーザー スクリプトを認識するために、オペレーティング システムはスクリプトを実行するために完全なシバン行を必要とします。

つまり、OP の場合、cloud-init は正しく動作します (つまり、スクリプトをダウンロードして実行しようとします) が、オペレーティング システムは実際にはそれを実行できません。

参照:ウィキペディアの Shebang (Unix)


Linux
  1. Nullglobがデフォルトではないのはなぜですか?

  2. Ssh –ネットワーク内のScpを自動化するスクリプト?

  3. Curl Outfile変数がBashスクリプトで機能しませんか?

  1. cronジョブが実行されていませんか?

  2. nohup:コマンドが見つかりません

  3. Ubuntu Python シバン行が機能しない

  1. file_put_contentsがtxtファイルを作成していません

  2. TERM 環境変数が設定されていません

  3. ターミナル出力をコピーするには?