最近做一個計劃任務老出毛病,腳本手動執行一切正常,在crontab里面就不能正常執行,檢查問題的時候始終不得方向,之后查看郵件才讓我發現是crontab的環境變量設置問題。現在知道要怎么修改了,哈哈,拿出來與大家分享,這個小問題還是比較值得留意一下的。
Crontab執行時不會讀取用戶的環境變量,所以有時在crontab中添加了腳本任務后經常會發現執行失敗,比如說執行ifconfig找不到這個命令之類的。大多數情況下是可能由于環境變量設置問題,如果有其他具體情況可以看root的mail里面郵件。因此,在編寫腳本時要聲明環境變量,防止發生此類錯誤。
在腳本開頭第一行#!/bin/bash和腳本注釋下添加兩行內容,如下:
1
2
3
4
5
|
#!/bin/bash
PATH=
/bin
:
/sbin
:
/usr/bin
:
/usr/sbin
:
/usr/local/bin
:
/usr/local/sbin
export
PATH
|
注意要在所有其他非注釋內容之前,這樣做之后腳本在crontab中就能正常執行了。
網上還有說法說用source ~/.bash_profile,我嘗試之后沒成功,不知道是我添加的地方錯了還是咋的。
另外在給crontab添加任務時不要忘了盡量讓信息返回,才能更早發現問題更快解決問題。
crontab的前面5個字段的意思分別是:
分鐘 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6)//0代表星期天
除了數字還有幾個個特殊的符號就是”*”、”/”和”-”、”,”,*代表所有的取值范圍內的數字,”/”代表每的意思,”*/5″表示每5個單位,”-”代表從某個數字到某個數字,”,”分開幾個離散的數字,比如下面幾個例子:
在12:00和13:00分別執行一次某命令,格式如下:
每兩個小時執行一次命令
晚上11點到早上8點之間每兩個小時,早上八點
1
|
0 23-7
/2
,8 * * *
command
|
每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
1月1日早上4點
命令之后可以將命令的信息重定向。Linux中重定向規則如下(不僅僅可用于crontab):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
command
> filename 把標準輸出重定向到一個新文件中
command
>> filename 把標準輸出重定向到一個文件中(追加)
command
1 > fielname 把標準輸出重定向到一個文件中
command
> filename 2>&1 把標準輸出和標準錯誤一起重定向到一個文件中
command
2 > filename 把標準錯誤重定向到一個文件中
command
2 >> filename 把標準輸出重定向到一個文件中(追加)
command
>> filename 2>&1 把標準輸出和標準錯誤一起重定向到一個文件中(追加)
command
< filename >filename2 把
command
命令以filename文件作為標準輸入,以filename2文件作為標準輸出
command
< filename 把
command
命令以filename文件作為標準輸入
command
<< delimiter 把從標準輸入中讀入,直至遇到delimiter分界符
command
<&m 把文件描述符m作為標準輸入
command
>&m 把標準輸出重定向到文件描述符m中
command
<&- 把關閉標準輸入
command
2>&1 把
command
命令標準錯誤重定向到標準輸出
|