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。