web-dev-qa-db-ja.com

systemdサービスファイルで `$ HOME`環境変数を使用する方法

ExecStart$HOME環境変数を使用しようとしています。 $HOME${HOME}など、さまざまなことを試しましたが、何も機能していないようです

ExecStart=${HOME}/bin/some-binary

誰もがこれの正しい形式を知っていますか?

9
Keeto

これはあなたが探しているものだと思います: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers

具体的には、%hは、現在のユーザーのホームディレクトリに展開する必要があります。

14
Jack O'Connor

User=fooを期待どおりに機能させるには、サービスファイルでこの${HOME}をユーザーに定義する必要があります。

ユーザーを設定しない場合、$HOMEは、コマンドの起動に使用されるデフォルトユーザーのホームディレクトリに展開されるため、$HOME、つまりバイナリと一致しません。

別の解決策は、バイナリの絶対パスを使用することです。

サポートされる変数(「指定子」と呼ばれます)の完全なリストは次のとおりです: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers

サービスを実行するユーザーのホームディレクトリ(User=で指定されたもの)の指定子はありません。サービスマネージャを実行しているユーザーには1つしかありません。

リンクから:

%hサービスマネージャを実行しているユーザーインスタンスのホームディレクトリです。システムマネージャの場合、これは「/root」に解決されます。この設定はnotサービスユニットの[Service]セクションで構成可能なUser=設定の影響を受けることに注意してください。

3
pR0Ps