systemd execコマンドで$(logname)を取得するには?

systemd execコマンドで$(logname)を取得するには?

私は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/

関連情報