스크립트가 포함된 Systemd 장치의 ExecStartPre에서 오류가 발생합니다. 스크립트 경로를 지정하는 방법은 무엇입니까?

스크립트가 포함된 Systemd 장치의 ExecStartPre에서 오류가 발생합니다. 스크립트 경로를 지정하는 방법은 무엇입니까?

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

관련 정보