systemdでスペースがある作業ディレクトリに問題があるのはなぜですか? (バルハイム専用サーバー)

systemdでスペースがある作業ディレクトリに問題があるのはなぜですか? (バルハイム専用サーバー)

以下のサービスからWorkingDirectoryエントリを完全に省略すると、systemdはファイルを解析できますが、サービス自体をWorkingDirectory設定する必要があります。ただし、この特定のディレクトリに設定されるたびに、次のようになります。

$ systemctl --user start valheim.service
Failed to start valheim.service: Unit valheim.service has a bad unit file setting.

表示されたディレクトリが正確で存在することを確認しました。

サービスファイルは次のとおりです。

[Unit]
Description=Valheim Server
After=multi-user.target

[Service]
RemainAfterExit=False
WorkingDirectory="/home/brandon/.local/share/Steam/steamapps/common/Valheim dedicated server"
ExecStart="/home/brandon/.local/share/Steam/steamapps/common/Valheim dedicated server/start_emerlain.sh"

[Install]
WantedBy=default.target

私も以下を試しましたsystemd-escape

$ systemd-escape --path "/home/brandon/.local/share/Steam/steamapps/common/Valheim dedicated server"
home-brandon-.local-share-Steam-steamapps-common-Valheim\x20dedicated\x20server

次に次に変更します。

WorkingDirectory=home-brandon-.local-share-Steam-steamapps-common-Valheim\x20dedicated\x20server

(また二重引用符を使ってみましたが、運がありませんでした)。

提案された方法を使用してもう少し詳細を調べると、苦しむ:

$ systemctl --user status valheim.service
Failed to parse bus message: No such device or address

編集1

たとえば、設定がWorkingDirectory="/home/brandon"同じ問題を引き起こさないことに言及することを忘れていました。 systemdはこのより簡単なディレクトリを許可するようです。

答え1

これはsystemdのバグのように見え、修正されました。次の回避策を使用して動作するようにRHEL 8で/ usr / bin / envを使用しています。ユーザー名などに合わせて変更しました。将来のバージョンのsystemdでは、スペースを含むパスに二重引用符または一重引用符を使用できます。

[Unit]
Description=Valheim service
Wants=network.target
After=syslog.target network-online.target

[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=brandon
WorkingDirectory=/home/brandon
ExecStart=/usr/bin/env -C "/home/brandon/.local/share/Steam/steamapps/common/Valheim dedicated server/" "/home/brandon/.local/share/Steam/steamapps/common/Valheim dedicated server/start_server.sh"

[Install]
WantedBy=multi-user.target

関連情報