11

私のユーザーデータスクリプト

#!
set -e -x
echo `whoami`
su root
yum update -y
touch ~/PLEASE_WORK.txt

コマンドから供給されます:

ec2-run-instances ami-05355a6c -n 1 -g mongo-group -k mykey -f myscript.sh -t t1.micro -z us-east-1a

しかし、ファイルを確認すると、次/var/log/cloud-init.logのようになりますtail -n 5

[CLOUDINIT] 2013-07-22 16:02:29,566 - cloud-init-cfg[INFO]: cloud-init-cfg ['runcmd']
[CLOUDINIT] 2013-07-22 16:02:29,583 - __init__.py[DEBUG]: restored from cache type DataSourceEc2
[CLOUDINIT] 2013-07-22 16:02:29,686 - cloud-init-cfg[DEBUG]: handling runcmd with freq=None and args=[]
[CLOUDINIT] 2013-07-22 16:02:33,691 - cloud-init-run-module[INFO]: cloud-init-run-module ['once-per-instance', 'user-scripts', 'execute', 'run-parts', '/var/lib/cloud/data/scripts']
[CLOUDINIT] 2013-07-22 16:02:33,699 - __init__.py[DEBUG]: restored from cache type DataSourceEc2

curl http://169.254.169.254/latest/user-dataまた、ファイルが意図したとおりに返されることも確認しました。

他のエラーやスクリプトの出力は発生しません。起動時にユーザーデータスクリプトを正しく実行するにはどうすればよいですか?

4

4 に答える 4

16

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

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

#!/bin/sh

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

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


参照: Wikipedia のShebang (Unix)

于 2014-09-05T08:42:09.200 に答える
0

問題はcloud-init、次回の起動時にユーザー スクリプトを実行できないことです。

まず、次を実行して cloud-init アーティファクトを削除します。 rm /var/lib/cloud/instances/*/sem/config_scripts_user

そして、ユーザーデータは次のようになります。

#!/bin/bash 
echo "hello!"

そして、インスタンスを起動します。動作するようになりました (テスト済み)。

于 2020-08-27T14:49:36.640 に答える