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