この質問は@FrusteratedWithFormsDesignerから来ました。コメント。
export
init.dスクリプトで設定された環境変数を同じinit.dスクリプトで開始されたダウンストリームプロセスで使用できるようにするにはどうすればよいですか?
詳しくは、Amazon EC2インスタンスを使用しており、init.dスクリプトを使用してnode
.jsサーバーを制御します。このサーバーはnodemon
ファイルの変更を観察し、node
必要に応じて再起動することで制御されます。つまり、私のinit.dスクリプトが起動してnodemon
から起動しますnode
。 init.dスクリプトに設定されている環境変数は、では使用できますが、使用できないようexport
です。これらの環境変数も使用できるようにするにはどうすればよいですか?nodemon
node
node
現在私のAmazon EC2インスタンスではinit.dのみを使用できますが、init.dスクリプトを使用するとこれは可能ですか?それ以外の場合は、upstartまたは可能な限りsystemdを使用してこれを達成できますか?
答え1
FedoraやUbuntu 16.04などのシステムベースのLinuxディストリビューションに切り替えることをお勧めします。systemd
環境変数はプロセスに簡単に渡すことができ、失敗したプロセスを自動的に再起動し、起動時に開始するタスクを処理できます。 systemdのログもロギングを非常によく処理します。 systemdはオペレーティングシステムのディストリビューションの一部であるため、他のものをインストールまたは実行するためのオーバーヘッドはありません。
以下は、systemdを使用してユニットファイルに2つの環境変数を設定する例です。
Environment="ONE=one" 'TWO=two two'
完全な文書は次のとおりです。ここ。
初期化システムとプロセスマネージャの両方が環境変数の渡しを処理するため、問題は部分的に複雑です。 systemd を初期化システムおよびプロセスマネージャとして使用すると、複雑さがなくなります。
答え2
推奨されるように、systemdサービス自体で環境ディレクティブを使用することに加えてこの回答、もう一つのオプションはEnvironmentFileディレクティブです。
私はこの分野の専門家ではないことに注意してください。 (明らかに私は質問の作者です。)私は最善を尽くして要約しようとしています。Fedora Wiki。自由に編集/修正してください。
環境ファイルディレクティブ
改行区切りの変数割り当てを含むファイルを作成します。
# myservice.env
ENV1=value1
ENV2=value2
次に、サービス単位ファイルでEnvironmentFileディレクティブを使用します。
[Service]
...
EnvironmentFile=-/path/to/myservice.env
...
ユニットファイルでおよび${ENV1}
を使用して$ENV1
その中に設定された変数を参照してください。myservice.env。
この行の「-」は、EnvironmentFile=
環境ファイルが存在しない場合にエラーメッセージが生成されないことを保証します。
答え3
AWS EC2 などの仮想化環境では、次の機能を利用できます。/etc/environment
[Service]
...
EnvironmentFile=/etc/environment
...