このトピックでは、次の問題の原因と解決策について説明します。Linuxインスタンスのユーザーデータが有効にならず、システムログに「モジュールスクリプトの実行に失敗しました-user(scripts in /var/lib/cloud/instance/scripts) 」というエラーメッセージが表示されます。
問題の説明
Linuxインスタンスのユーザーデータを設定してインスタンスを再起動すると、設定されたユーザーデータは有効にならず、システムログに次のエラーメッセージが表示されます。モジュールスクリプトの実行に失敗しました-user (スクリプトin /var/lib/cloud/instance/scripts) 。 エラーメッセージは、インスタンスの起動時にuser dataスクリプトがcloud-initで実行できなかったことを示しています。

インスタンスのシステムログとスクリーンショットを表示する方法については、「システムログとスクリーンショットの表示」をご参照ください。
原因
この問題は、無効な構文形式やユーザーデータスクリプトの実行中に発生したエラーなど、Linuxインスタンスに渡されたユーザーデータスクリプトのエラーが原因で発生する可能性があります。
解決策
Linuxインスタンスのユーザーデータスクリプトとして、さまざまなスクリプトやファイルを使用できます。 スクリプトは、異なる特性を有し、異なるユーザデータ規則に従う。 スクリプトに適用されるユーザーデータ規則に基づいて、Linuxインスタンスのユーザーデータスクリプトをトラブルシューティングします。
ユーザー-データスクリプト
- 最初の行は、数字記号と感嘆符 (
#!) で始まります。 - ユーザーデータスクリプトは、インスタンスが最初に起動したときに1回だけ実行されます。
#!/bin/sh
エコー "ハローワールド。 時間は今 $(日付-R) です! | tee /root/userdata_test.txt サンプルのユーザーデータスクリプトを実行して、インスタンスの最初の起動時にシステム時刻をuserdata_test.txtファイルに書き込むことができます。
User-Dataスクリプトの実行に失敗した場合は、次の一般的なCloud Assistantコマンドを実行して、失敗に関するエラーログを取得できACS-ECS-UserData-Check-for-linux.sh。 ログにエラーメッセージが表示された場合、スクリプトの実行中にエラーが発生します。 エラーメッセージがログに表示されない場合、スクリプトは期待どおりに実行されます。 他の側面からスクリプトを確認して、問題の原因を特定します。 一般的なCloud Assistantコマンドの詳細については、「一般的なコマンドの表示と実行」をご参照ください。
Cloud Configデータ
- 最初の行は
#cloud-configで始まり、ヘッダーにスペースを含めることはできません。 - スクリプトはYAML構文に従う必要があります。
- ユーザーデータが実行される頻度は、設定されたモジュールによって異なります。 たとえば、Apt configureモジュールを設定した場合、ユーザーデータはインスタンスごとに1回だけ実行されます。 Bootcmdモジュールを設定すると、インスタンスが起動するたびにユーザーデータが実行されます。
#cloud-config
apt:
プライマリ:
- アーチ:[デフォルト]
uri: https://us.archive.ubuntu.com/ubuntu /
bootcmd:
-エコー "ハローワールド。 時間は今 $(日付-R) です! | tee /root/userdata_test.txt サンプルcloud-configデータを実行して、デフォルトのソフトウェアリポジトリを変更し、インスタンスが起動するたびに最新のシステム時刻をuserdata_test.txtファイルに書き込むことができます。
include ファイル
- 最初の行は
#includeで始まり、ヘッダーにスペースを含めることはできません。 - 各スクリプトは、Base64でエンコードする前にサイズが16 KBを超えることはできません。
- ユーザーデータが実行される頻度は、スクリプトとモジュールの種類によって異なります。
#include
https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.sh この例のincludeファイルにはスクリプトリンクが含まれています。 実行頻度は、スクリプトのタイプによって決まります。 たとえば、スクリプトがユーザーデータスクリプトの場合、スクリプトはインスタンスが最初に起動したときに1回だけ実行されます。
Gzip 圧縮コンテンツ
にgzip圧縮できます。gz形式で、gzip圧縮コンテンツへのリンクを作成し、リンクをインクルードファイルとして渡します。 cloud-initは、gzip圧縮コンテンツを自動的に解凍します。 解凍されたコンテンツを実行した結果は、直接渡されたスクリプトを実行した結果と違いはありません。 Gzip圧縮コンテンツには次の特徴があります。 - 最初の行は
#includeで始まり、ヘッダーにスペースを含めることはできません。 - gzip圧縮コンテンツのサイズは、Base64でエンコードする前に16 KBを超えることはできません。
- ユーザーデータが実行される頻度は、スクリプトとモジュールの種類によって異なります。
#include
https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.gz includeファイルの例には、gzip圧縮コンテンツへのリンクが含まれます。 cloud-initはgzip圧縮コンテンツを読み取り、自動的に解凍して実行します。 実行頻度は、スクリプトタイプによって決まります。 たとえば、ユーザーデータスクリプトを圧縮してgzip圧縮コンテンツを取得した場合、gzip圧縮コンテンツは、インスタンスが最初に起動したときに1回だけ実行されます。
Upstart Job
- 最初の行は
#upstart-jobで始まり、ヘッダーにスペースを含めることはできません。 - アップスタートジョブスクリプトは、インスタンスが起動するたびに実行されます。
#upstart-job
説明 "upstart test"
start on runlevel [2345] # ランレベル2、3、4、および5で開始します。
stop on runlevel [!2345] #2、3、4、5以外の実行レベルで停止します。
exec echo "Hello World. 時間は今 $(日付-R) です! | ティー /ルート /output.txt ユーザーデータのサンプルについては、「Linuxインスタンスのユーザーデータの管理」をご参照ください。