私はsystemdサービス(/etc/systemd/system/name.service
)を作成しています。サービスの実行はに配置されます。コマンド内部では使用~/folder/script.sh
できないため使用しますが、動作しません。~/
ExecStart
/home/$(logname)/folder/script.sh
答え1
Systemd は、シェル環境より低いレベルで実行されます。私は、コマンドを実行するときに通常、initデーモン(この場合はsystemd)のサブプロセスであるシェル環境のサブプロセスです。これは、systemdデバイスがシェル環境を表示または従わず、~
ファイルに設定された環境変数(たとえば、.~/.profile
または)が~/.bashrc
適用されないことを意味します。何を見るかする適用コマンドを入力できますsystemctl show-environment
。私のシステム(Ubuntu ServerとArch)では、これPATH
とですLANG
。追加情報ここ。
これはユーザー単位のすべてです。しかし、systemdは私たちのようにユーザー単位のために少し強力な環境を維持しますsystemctl show-environment --user
。最後のコマンドを実行した場合は、何をすべきかを提供する必要があります。 Systemd(少なくとも私のシステムでは)は、環境変数をデバイスUSER
を実行しているユーザーのユーザー名に設定します。したがって、ExecStart行を/home/${USER}/folder/script.sh
。また、systemdのマニュアルページによると、(
& ...を使用しないことに注意してください。これは必要ありません。非常に奇妙な理由で、ユーザー名にスペースがある場合に備えて中)
括弧({
&)があります。ユーザーのホームディレクトリがそこにない場合も}
同様です。${HOME}/folder/script.sh
/home/