systemd $HOME 環境変数が予想と異なります。

systemd $HOME 環境変数が予想と異なります。

ルートとして実行されるサービスがあります。

[Unit]
Description=my service
After=docker.service network-online.target
Requires=docker.service network-online.target

[Service]
TimeoutStartSec=0
RestartSec=60
Restart=always
User=root
Group=root

ExecStart=/usr/bin/myservice

[Install]
WantedBy=multi-user.target

予期しない動作が発生しました。

障害を引き起こす環境変数を見てみると、その$HOME環境変数が。/rootmyservice

しかし、ルートとして次のようになります。

$ echo $HOME
/home/root

これは私が見たものと一致する/etc/passwd

root:x:0:0:root:/home/root:/bin/sh

手動で実行すると、myservice正しい$HOME環境変数が得られ、動作します。

私は$HOMEしたいのですが、/home/rootそうではありません/root。だから...

  1. どこからsystemd来て、/rootなぜ上書きされますか$HOME
  2. systemd$HOMEサービスファイルで環境変数を明示的に設定することに加えて、これがグローバルに行われるのを防ぐにはどうすればよいですか? <-- ソースコードを見てみると、あまり影響はないようです。

答え1

ソースコードを確認した後、ディレクトリがsystemd実際にユーザーhomeのためにrootハードコードされていることがわかりました。この設定を変更する構成文書が見つからなかったため、デフォルトのホームディレクトリを使用するYoctoプロジェクトについて知っておく必要があります。

/rootハードコードされた値をinに変更して/home/rootこれを確認しました。https://github.com/systemd/systemd/blob/main/src/basic/user-util.csystemd修正されたサービスが正しい変数で作成されていることを観察しました$HOME

これまではシンボリックリンクが良い解決策/rootでした。/home/rootデフォルトをROOT_HOME次に切り替えるのは/root悪い考えではないかもしれません。残りのLinuxの世界との支援

関連情報