저는 centOS 7을 사용하고 있으며 다음 연습을 함께 작성하려고 합니다.
그래도 둘 다 꽤 똑똑해 보였고 첫 번째 스크립트를 수동으로 검사하려고 할 때 막혔습니다.
그래서 /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"을 검색하고 있기 때문에 검색되지 않을 수 있습니다.sidekiq
sidekiq 5.1.3 pnvstart [0 of 20 busy]
pidof
sidekiq를 수동으로 시작하고 중지할 계획이 없다면 systemd의 자체 도구를 사용할 수 있습니다. systemctl is-active sidekiq
sidekiq가 실행 중이 아니면 오류 코드가 반환되고, 실행 중이면 성공합니다.
개인적으로 저는 엑시트순의 친구이므로 이렇게 코딩하겠습니다.
systemctl is-active sidekiq && exit # all is well
# oh no, it's gone!
systemctl restart sidekiq
mail -s ...