2010-11-14 50 views
1

我是Unix新手,不確定如何使用crontab。我想寫一個程序,每半夜更新一個文件。 0 0 * * *(每天午夜)。我希望用戶只在程序運行時第一次爲in_variable輸入一個值(請看下面的代碼),然後每隔一個午夜(沒有提示用戶第一次輸入值)。取決於舊的輸入(in_variable),程序應該在每個午夜執行if else語句。請讓我知道這是否可能?任何幫助將不勝感激。Unix,如何把crontab放在shell腳本中

echo "which message would you like to output: " 
read in_variable 
0 0 * * * 
if [ $in_variable -eq "1" ]; then 
    echo "output message 1" >> file1 
else 
    echo "output message 2" >> file2 
fi 

回答

2

使腳本詢問使用哪個消息中分離出來的cron作業,投入的消息在文件/var/lib下。使cron作業檢查文件的存在,然後處理追加內容(如果存在)。

3

Cron作業是自動的,不依賴於任何人的互動。

你的腳本應該從文件中讀取其初始輸入或它的初始化必須以交互式腳本(而不是從cron)來完成。

另外請注意,你不指定在shell腳本的時間表,但在crontab本身。也就是說,您的問題是是回到前端。您應該詢問如何將shell腳本放入crontab?對於這個問題的答案基本上是:

man cron。 (鏈接資源用於BSD,您的cron實現可能會有所不同)。

1

crontab不能像那樣工作。您不會將時間說明放入您想要運行的程序中;你把時間確定在crontab文件的地方(如視系統而定),同時指定運行程序和什麼程序或命令運行。

伊格納西奧有它的權利就做什麼用的變量:變量存儲在一個固定位置的文件,然後對文件的存在,你的腳本檢查。 Cron將與該部分無關。

0

快速醜陋的黑客(更多關於爲什麼它是經過破解版)將是:

echo "which message would you like to output: " 
read in_variable 

if [ $in_variable -eq "1" ]; then 
    echo '0 0 * * * echo "output message 1" >> file1' | crontab - 
else 
    echo '0 0 * * * echo "output message 2" >> file2' | crontab - 
fi 

這是醜陋的,因爲它完全刪除當前的crontab。一個更復雜的答案會爲要添加到crontab的新行提供某種「標記」,並且如果有人再次運行腳本,則會覆蓋舊行。它還將提供一種機制來刪除該行,同時保留先前存在的cron表。