systemd
を作成しようとしています サービス;
このサービスには、いくつかの環境変数を使用することになっているスクリプトがあります;
だから私はこれを作成しました:
cat /etc/systemd/system/atlantis-server.service
[Service]
ExecStart=/usr/local/bin/atlantis-server.sh
これを指す
[email protected]:~$ 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
承認された回答:
/etc/environment
はグローバル構成ファイルではありません。
のみ適用されます Linuxの場合; のみ login
で採用されているPAMセッションへ など。およびのみ 特定のPAMプラグインがシステムにインストールされて有効になっていて、そのPAMプラグインが他のファイルを使用するように構成されていない場合(/etc/environment
のため) 特に指示がない限り、これは単にデフォルトです)。それを読み取るのはそのPAMプラグインです。
それ以外の場合は、/etc
にある意味のないファイルです。 何も使用しません。
できた systemd-system.conf
で環境変数をグローバルに設定します 、これはすべてに適用されます 変更したいサービスだけでなく、サービス。
同様に、EnvironmentFile
適切なサービスユニットでは、systemdに環境変数定義のリストを含む共通ファイルを読み取らせる方法があり、systemdの人々はその使用を思いとどまらせます。彼らはEnvironmentFile
を考慮します 悪い考えとして、そしてそれを間違いとして使うこと。
systemdの人々ごとにこれを行う適切な方法は、サービスユニットの各変数にEnvironment
を設定することです。 設定。実際の環境変数の名前と値が含まれます ファイル名ではなく、設定する必要があります。これは、関連するサービスユニットに直接配置することもできます。ここで、/etc
に配置する独自のサービスユニットを作成している場合です。;または.conf
にあります /lib
で事前にパッケージ化されたサービスユニットを調整している場合は、ファイルをオーバーライドします または/usr/lib
。
さらに読む
- https://unix.stackexchange.com/a/419061/5132
- レナートポッターリング他(2016)。
systemd-system.conf
。 systemdのマニュアルページ。 Freedesktop.org。 - レナートポッターリング他(2016)。
systemd.exec
。 systemdのマニュアルページ。 Freedesktop.org。 - Andrew G.MorganとThorstenKukuk(2010年8月)。 「pam_env—環境変数の設定/設定解除」。 Linux-PAMシステム管理者ガイド 。 linux-pam.org。