cron 스크립트의 pid를 얻는 방법은 무엇입니까?

cron 스크립트의 pid를 얻는 방법은 무엇입니까?

저는 centOS 7을 사용하고 있으며 다음 연습을 함께 작성하려고 합니다.

프로세스가 실행 중인지 확인하는 스크립트

sidekiq을 서비스로 실행하는 Github 예

그래도 둘 다 꽤 똑똑해 보였고 첫 번째 스크립트를 수동으로 검사하려고 할 때 막혔습니다.

그래서 /etc/cron.hourly에서 다음 스크립트를 사용하여 sidekiq_restart를 배치했습니다.

    #!/bin/bash
# A simple script to check if a process is running and if not will
# restart the process and send a mail.
################################################
# The name of the program we want to check
PROGRAM=sidekiq

# The user we would like notified of the restart
MAILUSER="[email protected]"
################################################

PROCESSPID=$(pidof -s $PROGRAM)
if [ -z "$PROCESSPID" ];
then
# Use systemctl
systemctl stop $PROGRAM.service
systemctl start $PROGRAM.service
# Comment above and uncomment below to use service rather than systemctl
# service $PROGRAM restart
echo mail -s "Service $PROGRAM was found to be stopped on $HOSTNAME at $(date) and has been restarted" $MAILUSER << /dev/null
echo "$PROGRAM had FAILED on $HOSTNAME @ $(date)" >> $PROGRAM-check.log
else
echo "$PROGRAM was running ok on $HOSTNAME @ $(date)" >> $PROGRAM-check.log
fi
exit

나는 sidekiq을 서비스로 실행합니다.

systemctl start sidekiq

내가 확인할 때 ps -aux | grep [s]idekiq:

deploy_+  9883 36.4  0.6 474972 100292 ?       Ssl  14:23   0:02 sidekiq 5.1.3 pnvstart [0 of 20 busy]

완벽해 보이네요! 하지만 내가 시도할 때:

pidof -s sidekiq

아무것도 반환하지 않습니다! 물론 이는 스크립트가 잘못되었음을 의미합니다! 이 문제를 어떻게 해결하나요? 미리 감사드립니다!

답변1

출력 에 따르면 런타임 정보를 포함하도록 자체 프로세스 이름을 변경하는 ps것으로 보입니다 . 이 경우 "sidekiq"을 검색하고 있기 때문에 검색되지 않을 수 있습니다.sidekiqsidekiq 5.1.3 pnvstart [0 of 20 busy]pidof

sidekiq를 수동으로 시작하고 중지할 계획이 없다면 systemd의 자체 도구를 사용할 수 있습니다. systemctl is-active sidekiqsidekiq가 실행 중이 아니면 오류 코드가 반환되고, 실행 중이면 성공합니다.

개인적으로 저는 엑시트순의 친구이므로 이렇게 코딩하겠습니다.

systemctl is-active sidekiq && exit # all is well

# oh no, it's gone!
systemctl restart sidekiq
mail -s ...

관련 정보