すべてのプロダクト
Search
ドキュメントセンター

:Linuxインスタンスのユーザーデータが有効にならず、システムログに「モジュールスクリプトの実行に失敗しました-ユーザー (/var/lib/cloud/instance/scriptsのスクリプト) 」というエラーメッセージが表示された場合はどうすればよいですか?

最終更新日:Jan 23, 2025

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

問題の説明

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

image.png

インスタンスのシステムログとスクリーンショットを表示する方法については、「システムログとスクリーンショットの表示」をご参照ください。

原因

この問題は、無効な構文形式やユーザーデータスクリプトの実行中に発生したエラーなど、Linuxインスタンスに渡されたユーザーデータスクリプトのエラーが原因で発生する可能性があります。

解決策

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は、ユーザーデータを使用して特定のタスクを実行する最も簡単な方法です。 cloud-initを使用して特定のタスクを実行する場合は、cloud-configを使用して設定を完了することを推奨します。
Cloud-configは、インスタンスの特定のサービス (YUMリポジトリの更新、SSHキーのインポート、依存関係のインストールなど) を事前に設定するための便利な方法です。 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 ファイル

包含ファイルには、1行に1つずつ、1つ以上のスクリプトリンクが含まれます。 インスタンスが起動すると、cloud-initは各スクリプトリンクとスクリプトコンテンツを読み取ります。 スクリプトの読み込み中にエラーが発生した場合、残りのスクリプトは読み込まれません。 Includeファイルには次の特徴があります。
  • 最初の行は #includeで始まり、ヘッダーにスペースを含めることはできません。
  • 各スクリプトは、Base64でエンコードする前にサイズが16 KBを超えることはできません。
  • ユーザーデータが実行される頻度は、スクリプトとモジュールの種類によって異なります。
例:
#include
https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.sh 

この例のincludeファイルにはスクリプトリンクが含まれています。 実行頻度は、スクリプトのタイプによって決まります。 たとえば、スクリプトがユーザーデータスクリプトの場合、スクリプトはインスタンスが最初に起動したときに1回だけ実行されます。

Gzip 圧縮コンテンツ

ユーザーデータスクリプト、cloud-configデータ、またはincludeファイルのサイズが16 KBを超える場合は、ユーザーデータスクリプト、cloud-configデータ、またはincludeファイルをに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

アップスタートジョブスクリプトの内容は、/etc/initディレクトリのファイルに配置されます。 Upstartジョブスクリプトには、次の特徴があります。
  • 最初の行は #upstart-jobで始まり、ヘッダーにスペースを含めることはできません。
  • アップスタートジョブスクリプトは、インスタンスが起動するたびに実行されます。
説明 アップスタートジョブスクリプトを使用するには、インスタンスのアップスタートサービスをインストールする必要があります。 アップスタートサービスは、CentOS 6、Ubuntu 10、Ubuntu 12、Ubuntu 14、Debian 6、およびDebian 7のいずれかのオペレーティングシステムを実行するインスタンスでサポートされます。
例:
#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インスタンスのユーザーデータの管理」をご参照ください。