簡體   English   中英

Unix,如何將crontab放在shell腳本中

[英]Unix, how to put crontab in a shell script

我是Unix的新手,不確定如何使用crontab。 我想編寫一個程序,將在每個午夜更新文件。 0 0 * * *(每天午夜)。 我希望用戶僅在程序第一次運行時輸入in_variable的值(請看下面的代碼),其余的工作在“午夜”進行(不提示用戶在第一次后再輸入任何值)。 根據舊的輸入(in_variable),程序應在每個午夜執行if else語句。 請讓我知道是否可行? 任何幫助將不勝感激。

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

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

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

另請注意,您沒有在shell腳本中指定調度,而是在crontab本身中指定了調度。 也就是說, 您的問題是從頭至尾的 您應該問如何將shell腳本放入crontab中 為此,答案基本上是:

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

使腳本詢問獨立於cron作業使用哪個消息,並將消息放入/var/lib下的文件中。 使cron作業檢查文件是否存在,然后處理是否存在附加內容。

crontab不能那樣工作。 您沒有將時間規范放在要運行的程序中; 您將時間指定放在crontab文件中(該位置隨系統而異),該文件指定了何時運行程序以及要運行什么程序或命令。

Ignacio正確處理變量:將變量存儲在固定位置的文件中,然后讓腳本檢查文件是否存在。 Cron與這部分無關。

一個快速的丑陋的駭客(更多有關為什么以后會成為駭客)將是:

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表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM