2010-09-03 70 views
39

如何將變量存儲在我的crontab中?我意識到這不是shell,但說我想有一些常量,如我的應用程序的路徑或什麼?crontab中的變量?

想法?

回答

68

在Vixie cron中,這可能是最常見的,你可以這樣做幾乎就像一個shell腳本。

VARIABLE=value 
PATH=/bin:/path/to/doathing 
0 0 * * * doathing.sh $VARIABLE 

手冊頁說:

在一個crontab的有源線將是要麼是一個環境設置或cron命令。環境設置的形式爲,

 name = value 

其中圍繞等號(=)的空間是可選的,並且在值的任何後續的非前導空格將被分配給 名稱值的一部分。值字符串可以放在引號中(單或雙,但匹配)以保留前導空白或尾隨空白。名稱 字符串也可放置在引號(單或雙,但匹配)以保留前導,尾隨或內部空白。

你可以通過檢查crontab的手冊頁來判斷你是否有Vixie cron;作者將是Paul Vixie。不同的cron可能會也可能不會支持這個(BusyBox的cron,例如,不),在這種情況下,您最好的選擇是將您的命令包裝在shell腳本中,然後從cron運行該腳本。事實上,對於任何複雜的事情來說,這是一件好事。

+3

+1這就是答案 – 2010-09-03 20:48:46

+0

回來看看我3年前問的這個問題。有趣的事情是怎麼回事? – 2013-07-01 08:57:56

+12

這篇文章有誤導性--cron只支持在cron表中設置的一組特定變量;例如HOME,MAILTO,SHELL等。您*無法*設置自定義變量,例如FOO = /富/ DIR。我想我會張貼這篇文章,因爲這篇文章引導我走了幾個小時的錯誤道路。 – Jmoney38 2013-07-08 11:50:33

-8

我不是一個unix傢伙,所以我不能說任何明確的,但這聽起來像一個預處理器步驟的好地方。

#define cmdpath /usr/bin/myfolder/cmd 
0,30 8-17 * * 1-5 cmdpath 
17 3 * * 1 cmdpath 

運行,通過我的C++編譯器的預處理器提供瞭如:

0,30 8-17 * * 1-5 /usr/bin/myfolder/cmd 
17 3 * * 1 /usr/bin/myfolder/cmd 

這似乎是你想要什麼。

+11

當你只有一把錘子時,每個問題看起來都像一個釘子。 – 2010-09-03 20:45:33

+2

用crontab -e編輯crontab的過程相對簡單,只需要編輯你的crontab,調用cpp,然後用crontab安裝新的crontab $ filename – mkb 2010-09-03 20:50:01

+0

@Matt:a)這就是shell腳本for和b),但是'crontab -e'沒有做到他想做的事情,所以這不是一個真正的答案。 – 2010-09-03 20:54:00

2

你可以把環境變量放在crontab中。有關更多詳細信息,請參閱手冊頁crontab(5)