GNU/Linux >> Linux の 問題 >  >> Linux

cron ジョブがまだ実行されていない場合にのみ実行する

flock を使用 .それは新しい。それは良いです。

これで、自分でコードを書く必要がなくなりました。ここでその他の理由を確認してください:https://serverfault.com/a/82863

/usr/bin/flock -n /tmp/my.lockfile /usr/local/bin/my_script

私が書いた印刷スプーラ プログラムに対してこれを行います。これは単なるシェル スクリプトです:

#!/bin/sh
if ps -ef | grep -v grep | grep doctype.php ; then
        exit 0
else
        /home/user/bin/doctype.php >> /home/user/bin/spooler.log &
        #mailing program
        /home/user/bin/simplemail.php "Print spooler was not running...  Restarted." 
        exit 0
fi

2 分ごとに実行され、非常に効果的です。何らかの理由でプロセスが実行されていない場合、特別な情報をメールで送信するようにしています。


他の人が述べているように、PID ファイルの書き込みとチェックは良い解決策です。これが私の bash 実装です:

#!/bin/bash

mkdir -p "$HOME/tmp"
PIDFILE="$HOME/tmp/myprogram.pid"

if [ -e "${PIDFILE}" ] && (ps -u $(whoami) -opid= |
                           grep -P "^\s*$(cat ${PIDFILE})$" &> /dev/null); then
  echo "Already running."
  exit 99
fi

/path/to/myprogram > $HOME/tmp/myprogram.log &

echo $! > "${PIDFILE}"
chmod 644 "${PIDFILE}"

Linux
  1. ファイルがまだ存在しない場合にのみファイルに行を追加する

  2. PHPスクリプトを実行するためのGodaddy cronジョブのセットアップ

  3. Linux で 6 時間ごとに cron ジョブを実行する

  1. 1時間10分ごとにcronジョブを実行する方法

  2. LinuxでCRONジョブを10秒ごとに実行するように設定するには?

  3. 3か月ごとにcronジョブを実行する方法は?

  1. 特定の曜日に cron ジョブを実行する方法

  2. 2 日ごとの午後 11 時に cron ジョブを実行するように設定する方法

  3. 毎日特定の時間にcronジョブを実行する方法は?