サービスを作成しようとしていますsystemd
。
サービスには、いくつかの環境変数を使用する必要があるスクリプトがあります。
だから私はこれを作りました:
cat /etc/systemd/system/atlantis-server.service
[Service]
ExecStart=/usr/local/bin/atlantis-server.sh
これは次のことを示しています。
pkara@atlantis-server:~$ cat /usr/local/bin/atlantis-server.sh
#!/bin/bash
source /etc/environment
atlantis server --atlantis-url="$URL" --gitlab-user="$USERNAME" --gitlab-token="$TOKEN" --gitlab-webhook-secret="$SECRET" --gitlab-hostname="$HOSTNAME" --repo-whitelist="$REPO_WHITELIST"
私は(私のsystemd
ログにいくつかのエラーが発生した後)明示的にする必要があることがわかりました。source /etc/environment
(ここでは上記の変数が宣言されています。)
これはなぜ必要ですか?
グローバルに表示されませんか?
編集する:これをサービス定義に追加しても問題は解決されませんでした。
Environment=/etc/environment
ベストアンサー1
/etc/environment
グローバル構成ファイルではありません。
適用されますただLinuxでは;ただlogin
使用されるようなPAMセッションにただ特定のPAMプラグインがシステムにインストールされて有効になっていて、そのPAMプラグインが他のファイルを使用するように構成されていない場合(/etc/environment
特に指定のない限り、これは単なるデフォルトです)。これを読むのはPAMプラグインです。
それ以外の場合は、目的のない無意味なファイルにすぎません/etc
。
時できるsystemd-system.conf
グローバルに環境変数を設定するみんな変更したいサービスだけでなく、サービスも同様です。
同様にEnvironmentFile
、systemdの適切なサービス単位には、環境変数定義のリストを含むパブリックファイルを読み取る方法がありますが、systemdではそのサービス単位を使用しないことをお勧めします。彼らはEnvironmentFile
それが悪い考えだと考え、その使用を間違いと見なします。
すべてのシステムユーザーがこれを行う正しい方法は、Environment
サービスユニットのすべての変数を次の設定に設定することです。実際の環境変数名と値を含みます。ファイル名ではなく設定されます。独自のサービスユニットを作成してここに配置する場合は関連するサービスユニットに直接配置することができ、事前にパッケージ化されたサービスユニットを適用する場合は/etc
オーバーレイファイルに配置できます。.conf
/lib
/usr/lib
追加読書
- https://unix.stackexchange.com/a/419061/5132
- Lennart Petlinget al。 (2016).
systemd-system.conf
。システムのマニュアルページ。 freedesktop.org. - Lennart Petlinget al。 (2016).
systemd.exec
。システムのマニュアルページ。 freedesktop.org. - Andrew G. MorganとThorsten Kukuk(2010年8月)。 」pam_env — 環境変数の設定/設定解除」。 Linux-PAMシステム管理者ガイド。 linux-pam.org.