
서비스 시작/중지/다시 시작 방식으로 호출되도록 bash 스크립트에서 서비스를 디자인하는 작업이 있습니다.
서비스가 될 스크립트는 매분 깨어나서 몇 가지 검사를 수행하는 무한 while 루프입니다. 나는 그것을 이렇게 부른다:
start() {
echo -n $"Starting $DESC:"
DAEMON_ARGS=$(xmlstarlet sel -T -t -m "/config/input/sensor/device/resource" -v "concat(../../@type, ' ', ../../@dev, ' ', @res)" -n $CONFIGURATION_FILE | extract_devices) # get device names out of XML file
echo "daemon args $DAEMON_ARGS"
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo}
pid와 데몬은 다음과 같이 정의됩니다.
PIDFILE="/var/run/detection.pid"
NAME="jblub_control_loop.sh"
DAEMON="/root/test_det/${NAME}"
내가 달릴 때
./Detection start (init.d에 복사하고 서비스 감지 시작으로 실행도 시도했습니다)
init 스크립트는 단순히 루프에서 벗어나지 않고 시작-중지-데몬 기능에서 차단된 상태로 유지됩니다. jblub_control_loop.sh 내에서 무한 while 루프를 주석 처리하면 통과하지만 pid 파일이 생성되지 않습니다.
내 질문은 무한 루프를 서비스로 사용하여 스크립트를 올바르게 시작하는 방법과 내 pid 파일이 생성되지 않는 이유입니다.
답변1
우선,
--Background 스위치를 사용하여 분기되도록 합니다. -m 스위치를 사용하여 PID 파일을 만듭니다.
start-stop-daemon --start --background -m --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
완전한 답변을 보려면 다음을 참조하세요.https://stackoverflow.com/questions/16139940/what-is-start-stop-daemon-in-linux-scripting
즐기다