2014-12-03 122 views
1

我已經從夜間騎車服務改爲每週一次,但在更新INI之後,我希望服務器能夠正確地循環服務。我想我可以使用'at'命令並將它與更新INI文件的命令一起發送。Linux在命令腳本不斷重複

問題是這樣的,我使用的是我在cronjob中使用的相同命令,而不是像cron一樣循環一次,當我使用'at'服務時,每隔一段時間分鐘。使用 '在'

#!/bin/bash 

export SRVINI=/u01/home/me/scripts/buildini 
SERVERLIST=$SRVINI/serverlist.txt 

## Generate the body to send out to each server 
touch $SRVINI/body.ini 
## copying server.ini commented out as Senthil wants a different copy that he will edit 
#cp $SRV_DATA/server.ini $SRVINI/ 
$SRVINI/generate_body.pl 
#rm $SRVINI/server.ini 

## scp the body of the ini file to each server 
for i in `cat $SERVERLIST` ; do 
    scp $SRVINI/body.ini $i:$SRVINI/ 
done 

## Call outside perl script to manipulate the files 
for i in `cat $SERVERLIST` ; do 
    ssh $i "source ~/.bash_profile ; cd $SRVINI ; $SRVINI/buildini.pl ; at now + 15 minutes <<< '/u01/home/server/scripts/cycleSRVC.sh > /u01/home/server/logs/cycleSRVC.log 2>&1'" 
done 

rm $SRVINI/body.ini 

的cronjob

15 04 * * 6 /u01/home/me/scripts/cycleSRVC.sh >/u01/me/tomax/logs/cycleSRVC.log 2>&1 

腳本我用 'ATQ' 和核實,只有一個工作是在每個服務器上創建的。這讓我覺得我的腳本通過ssh正確發送。

我知道循環腳本的工作原理,因爲它作爲cronjob運行時沒有問題。

我嘗試了不同的方式傳遞'at'命令,他們都在所有的服務器上創建一個作業,它們都運行,但他們都在幾分鐘後重新開始循環,我必須手動殺死騎自行車,殺死服務並把他們帶回來。

在如何進行損失。目前,當我對INI進行更新時,我會在所有8臺服務器上手動循環服務。非常感謝幫助。謝謝。

UPDATE

我注意到,當我做「ATQ」它運行後,它顯示爲

>atq 
22  2014-12-02 22:01 = usr 

這是否意味着它只是不斷跑跑步?這是否意味着循環腳本有錯誤,因此它從未完成at命令?如果是這樣,爲什麼它作爲一個cronjob?

最後更新:

發現這個問題。它在cycleSRVC.sh腳本中,而不是'at'。 當我的服務正在啓動備份我打電話:

# Restart services 
/u01/app/progs/start.sh 
sleep 30 

我有一個「&」推start.sh添加到背景。不這樣做會讓它處於一種奇怪的狀態,之後會有睡眠。奇怪的小事讓我產生了很多問題。

在此發佈此信息可以幫助任何可能有同樣挫敗感的人。

+0

請將您的解決方案作爲答案發布,以便將此問題從「未答覆」列表中解決。另見:http://stackoverflow.com/help/self-answer – 2014-12-03 11:29:00

+0

@Ruud謝謝!會做 – bigw8 2014-12-04 22:47:04

回答

0

原來我的'at'實現沒有錯。問題在於循環腳本。

代碼處於最終更新。