
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
這兩個都是 cron 內的作業,每隔 10 分鐘運行一次,@17:30 第二個作業開始,1735 第一個作業開始,避免第一個作業在實際開始之前被秒殺。
第一個腳本由以下程式碼組成
#!/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
第二個腳本由以下程式碼組成。
#!/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 秒的睡眠時間,我想嘗試幫助排序。如果您想按順序執行這兩個作業,您應該將其重寫為單一腳本,並按您想要的順序執行。也許是這樣的:
#!/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