
MAILTO=""
*/10 * * * * /bin/bash /var/www/sym_monitor/sym_start.sh > /var/www/migrate/root_start.txt 2>&1
*/10 * * * * /bin/bash /var/www/sym_monitor/stop.sh > /var/www/migrate/root_stop.txt 2>&1
これらは両方とも、10 分間隔で実行される cron 内のジョブで、17:30 に 2 番目のジョブが開始され、17:35 に最初のジョブが開始され、実際に開始される前に最初のジョブが 1 秒ごとに強制終了されることを回避しています。
最初のスクリプトは次のコードで構成されています
#!/bin/bash
value=$(</var/www/sym_monitor/man.txt)
if [ "$value" == "true" ]; then
ps -ef|grep sym |grep -v grep |awk '{ print $2 }'|sudo xargs kill -9;
fi
2 番目のスクリプトは次のコードで構成されています。
#!/bin/bash
value=$(</var/www/sym_monitor/man.txt)
if [ "$value" == "true" ]; then
sleep 30;
cd /var/www/symmetric-ds-3.1.6/bin;
(sudo ./sym --port 8082 --server);
fi
問題は、両方のスクリプトを実行すると、残念ながら sym_start.sh が実行されないことです。ただし、stop.sh を削除して停止スクリプトを手動で実行すると、cron 内の唯一のスクリプトが正しく実行されます。なぜこのようなことが起こるのでしょうか? 何か考えはありますか?
答え1
crontab の説明によると、両方が同時に実行されます。開始スクリプトには 30 秒間のスリープが含まれていますが、これは順序付けを助けるためだと思います。2 つのジョブを順番に実行したい場合は、必要な順序で実行する単一のスクリプトとして書き直す必要があります。次のようになります。
#!/bin/bash
value=$(</var/www/sym_monitor/man.txt)
if [ "$value" == "true" ]; then
ps -ef|grep sym |grep -v grep |awk '{ print $2 }'|sudo xargs kill -9;
fi
sleep 30;
if [ "$value" == "true" ]; then
cd /var/www/symmetric-ds-3.1.6/bin;
(sudo ./sym --port 8082 --server);
fi