2012-12-18 77 views
2

我正在嘗試在遠程服務器上安排作業。我希望根據當前服務器時間安排一分鐘,或者在服務器上運行上一個計劃作業的服務器時間一分鐘。這樣,沒有兩個作業同時運行(並且因此避免了競爭條件)。工作安排與'在`。 「EOF:未找到」

作業調度是通過遠程(linux)服務器上的at命令完成的。我不得不使用at,因爲我在連接到相同服務器的幾臺主機上運行一系列複雜的仿真以請求進行下一次仿真(爲簡潔起見,此部分已從我的問題中省略)。

我遇到了試圖安排作業在最後一次預定作業後一分鐘運行的問題(或者從現在起,如果沒有預定作業,現在需要一分鐘)。我的調度腳本目前看起來是這樣的:

minute=`atq | sort -t" " -k1 -nr | head -n1 | cut -d' ' -f4 | cut -d":" -f1,2` 
curr=`date | cut -d' ' -f4 | cut -d':' -f1,2` 

# the 'python -c" prints the correct scheduling time to stdout 
cat <<EOF | at `python -c "import sys; hour,minute=map(int,max(sys.argv[1:]).split(':')); minute += 1; hour, minute = [(hour,minute), ((hour+1)%24,(minute+2)%60)][minute>=60]; print '%d:%02d'%(hour, minute)" "$minute" "$curr"` 

python path/to/somescript "$1" 

EOF 

然而,這個劇本,我得到以下錯誤:

somescript: 8: EOF: not found 

但是,如果我硬編碼如下時,該錯誤會消失,調度收益預期:

minute=`atq | sort -t" " -k1 -nr | head -n1 | cut -d' ' -f4 | cut -d":" -f1,2` 
curr=`date | cut -d' ' -f4 | cut -d':' -f1,2` 

cat <<EOF | at 16:48 # or whatever other time 

python path/to/somescript "$1" 

EOF 

我會很感激就如何爲我的整個設置去瘋狂,因爲這錯誤的結果修正這個錯誤的任何幫助。

謝謝

回答

1

只是一個念頭。而不是使用這裏的文檔爲什麼不創建一個臨時文件並擺脫EOF問題?

或做到這一點:

echo python path/to/somescript "$1" | at `python -c "import sys; hour,minute=map(int,max(sys.argv[1:]).split(':')); minute += 1; hour, minute = [(hour,minute), ((hour+1)%24,(minute+2)%60)][minute>=60]; print '%d:%02d'%(hour, minute)" "$minute" "$curr"` 

將擺脫EOF的,也許你可以看到錯誤更好。

我猜測Python代碼barfs在一些奇怪的條件下,缺少導致零,上午/下午,我目前沒有看到的東西。

1

而不是cat <<EOF | at ...,請嘗試at <time> <<EOF。沒有理由在這裏折磨cat

+0

+1。不知道'at'可以這樣使用。 :) – inspectorG4dget

0

這是我最終實現:

minute=`atq | sort -t" " -k1 -nr | head -n1 | cut -d' ' -f4 | cut -d":" -f1,2` 
curr=`date | cut -d' ' -f4 | cut -d':' -f1,2` 

# the 'python -c" prints the correct scheduling time to stdout 
gotime=`python -c "import sys; hour,minute=map(int,max(sys.argv[1:]).split(':')); minute += 1; hour, minute = [(hour,minute), ((hour+1)%24,(minute+2)%60)][minute>=60]; print '%d:%02d'%(hour, minute)" "$minute" "$curr"` 

cat <<EOF | at "$gotime" 

python path/to/somescript "$1" 

EOF 

和它的工作就像一個魅力