0

リモート mysql サーバーでレプリケーションをチェックする CEntOS 5.5 マシンで bash スクリプトを実行しようとしています。このスクリプトは一時的なロック ファイルを作成し、Crontab で毎分実行するようにスケジュールされています。しかし、時々 cron ジョブが同期しなくなり、ジョブを 2 分間一時停止または遅延させ、一度に 3 つのジョブを実行しようとします。これにより、誤ったアラームが作成され、「ロック ファイルが存在します! コンフリクトの可能性があります」というメッセージがメールボックスに殺到します。

スクリプトの興味深い部分は次のとおりです。

#!/bin/sh

lock_file=/tmp/slave_alert.lck
finished=0

# Alert function
function mail_alert () {
        cat /var/log/replication_check.log | mail -s "Replication check errors!" mail@mail.com
}    

# Check if lock file exists
if [ -f $lock_file ];
then
        echo "Lock file exists! Possible conflict!" > /var/log/replication_check.log 2>&1
        mail_alert
        exit 1
else
        touch $lock_file
fi

finished=1


while [ $finished -ne 0 ]
do

if [Replication is not configured or you do not have the required access to MySQL];
then
        rm $lock_file
        exit 1
fi
# Do some logic
sleep 1
done

rm $lock_file

echo "Script complete!"
exit 0

これがクロンジョブです:

* 0-1,4-23 * * * path/check_replication.sh > /dev/null 2>&1

ログ ファイルの出力の一部を次に示します: /var/log/cron 。14:35 と 14:36 が遅れていることがわかります。

この文字列に CRONJOB = (root) CMD (path/check_replication.sh > /dev/null 2>&1) という名前を付けましょう。

Sep 23 14:30:01 remote-host crond[3959]: CRONJOB
Sep 23 14:31:01 remote-host crond[4025]: CRONJOB
Sep 23 14:32:01 remote-host crond[4054]: CRONJOB
Sep 23 14:33:01 remote-host crond[4102]: CRONJOB
Sep 23 14:34:01 remote-host crond[4129]: CRONJOB
Sep 23 14:37:00 remote-host crond[4276]: CRONJOB
Sep 23 14:37:01 remote-host crond[4308]: CRONJOB
Sep 23 14:37:02 remote-host crond[4365]: CRONJOB
Sep 23 14:38:01 remote-host crond[4129]: CRONJOB
Sep 23 14:39:01 remote-host crond[4129]: CRONJOB
4

0 に答える 0