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