私はUbuntu 14.04と16.10を使用しているので、初期化システムを起動またはシステム化できます。
絵Amazon EC2で環境変数を設定する方法curl
スタックオーバーフローは、インスタンスIDのインポート、インスタンスタグのインポートを使用して、対話型シェルまたはシェルaws ec2 describe-tags
スクリプトに環境変数としてインポートする方法を示しています。答えの1つは、このデータを実行する方法も示していますjq
。
これはすべて素晴らしいですが、シェルスクリプトやインタラクティブシェルで変数を設定する必要はありません。source
これらの項目を設定する必要がある場所に関連するシェルがないため、この回答のようなシェルスクリプトを持つことは私には利点がありません。
systemdまたはupstartで始まるデーモン環境で設定する必要があります。特に systemd の場合、サービスユニットファイルはシェルスクリプトではありません。別の言葉。環境変数を設定するには、次の内容をEnvironment=
ユニットファイルに入れます。
それでは、チェーンの最後のリンクをどのように生成しますか? Stack Overflowの内容を使用してデータを読み込み、それから環境に似た文字列を生成することができました。 (実際に読んでいます。var=val
インスタンスメタデータとユーザーデータしかし、原理は同じです。何かを抽出しcurl
、jq
別の後処理を実行して作成します。 )var=val
チェーンの最後のリンクを作成し、これらの文字列を起動し、システムが実行されている特定のサービスのコンテキストにどのように配置しますか?
答え1
ファイルの文字列を形式で取得できる場合環境変数の割り当て、例えば
SOME_NAME=some_value
EnvironmentFile=
これにより、ユニットファイルの設定を使用できます。詳細についてはを参照してくださいman systemd.exec
。
exec
環境変数設定を使用して最初にファイルをインポートしてから、元のサービスをインポートするスクリプトで開始したいサービスをいつでも置き換えることができます。これはNuboの金持ちにも当てはまります。
たとえば、
#!/bin/sh
. /some/where/environment-variable-settings-file
exec original-service "$@"