아래 서비스에서 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