スクリプトにsystemdサービスを使用していますが、home/user/.bashrcから環境値を設定する必要があります
source /home/user/.bashrc
はスクリプトでは機能せず、systemdシードはソース機能をサポートしていません。助けて
EnvironmentFileを生成しようとする代わりに、シェルに起動スクリプトを実行させ、thenコマンドを実行させます。これにより、(env
が環境を格納する方法とsystemd EnvironmentFile
オプションが環境をロードする方法の間など)不一致を引き起こす可能性のある手順が回避されます。
[Service]
Type=simple
User=user
Group=user
ExecStart=/bin/bash -l -c 'exec "$@"' _ your-command arg1 arg2 ...
ここでは、ログインシェルを実行するためにbash -l
を使用する代わりに、$0
を明示的にソースし、その位置に/home/user/.bashrc
を渡します。
[Service]
Type=simple
User=user
Group=user
ExecStart=/bin/bash -c '. "$0" && exec "$@"' /home/user/.bashrc your-command arg1 arg2 ...
.bashrc
ファイルは通常、インタラクティブな環境をセットアップするためのものです。これは、それらの設定がサービスに適切でないことが多いことを意味します。EnvironmentFile
を構築すると、サービスがどのように実行されているかがわかります正確に対話型環境とは別に設定できます。 Ifシェルで実行されたときに同じ意味を持つようにそのEnvironmentFileを手動で監査した場合は、set -a; source /path/to/your-environment-file; set +a
で.bashrc
を実行して、環境変数を取り込むこともできます。EnvironmentFile
を/etc/conf.d
のようにユーザーが書き込みできない場所で使用することは、そのユーザーのホームディレクトリにあるドットファイルよりも安全です。