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

関連情報