pidof コマンドを使う (稼働中のプロセスIDを返す)
||で繋げてコマンド実行すればOK/proc/$$/commあたりと同じ動作なので、スクリプトの場合bashが入ってしまうpidof -x fooのように-xを入れるとスクリプトは対応できる
基本、 ps foo | grep 相当なので、同名スクリプトは誤検出してしまう
- 複数のディレクトリで別の
./run.shを実行している場合など
crontab
15 5-21 * * * /data/gunosy-feeder/run
30 5-21 * * * /data/sodsp-feeder/run/tmp/a/run.shとフルパスで実行して、pidof -x /tmp/a/run.shなら対応可能- しかし、cron 以外に人手で
cd /tmp/a && ./run.shとかされると無力
runみたいなのをやめて、もう別名にする。シンプルで全てが解決する。psにも優しい- 今後作る時はこれがよいが、既存プロジェクトには厳しい
- 名前を変更できない場合、スクリプトであれば起動するプロセス名を
exec -a fooで明示できる
before
make once 2>&1 >> cron.logafter
pidof -x gunosy-feeder > /dev/null || exec -a gunosy-feeder make once 2>&1 >> cron.log