以下のサービスから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