내 임무는 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}"
내가 달릴 때
./시작 감지(init.d에 복사하고 시작 감지 서비스를 사용하여 실행해 보기도 했습니다)
init 스크립트는 루프에서 전혀 벗어나지 않으며 start-stop-daemon 함수에서 차단된 상태로 유지됩니다. 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
즐기다