私は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 ...