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

관련 정보