systemd 에서 제공해야 하는 스크립트가 있습니다 ExecStartPre
. 이 스크립트를 넣을 올바른 경로는 무엇이며 유닛에서 이를 어떻게 지정합니까? 현재 이러한 경로를 사용하면 실패합니다(잘못된 장치 파일로 인해 서비스가 시작되지 않음).
- 스크립트 파일
- ./script.sh
- /etc/systemd/system/script.sh
- /usr/local/sbin/script.sh
상태에서 발생하는 오류는 다음과 같습니다.
프로세스: 8679 ExecStartPre=/usr/local/sbin/script.sh(코드=종료, 상태=203/EXEC)
스크립트는 다음과 같습니다.
#!/bin/bash
if [ ! -e /var/log/myservice ];
then
echo "myservice's log directory doesn't exist. creating it."
mkdir /var/log/myservice
fi
답변1
스크립트를 변경할 필요가 없으므로 권장됩니다.이 답변에서적용 가능: 스크립트를 에 넣어야 합니다 /usr/local/sbin
. 또한 실행 가능해야 합니다. 당신 ExecStartPre
은 될 것이다
ExecStartPre=/usr/local/sbin/script.sh
그러나 디렉터리를 만드는 데 스크립트가 전혀 필요하지 않습니다.
ExecStartPre=mkdir -p /var/log/myservice
더 나은 방법은 다음을 사용하는 것입니다.LogsDirectory=
, 필요한 경우 디렉토리를 생성하고 샌드박스 내에서 디렉토리를 사용할 수 있는지 확인합니다(서비스가 샌드박스된 경우).
LogsDirectory=myservice