crontab環(huán)境變量問題-創(chuàng)新互聯(lián)

在crontab中運(yùn)行腳本來查看hadoop相關(guān)信息,由于hadoop、java默認(rèn)部署在/usr/local下面, 所以導(dǎo)致crontab執(zhí)行時(shí)出現(xiàn)報(bào)錯(cuò)。具體與環(huán)境變量有關(guān)系,下文描述比較清楚。

創(chuàng)新互聯(lián)2013年至今,先為青羊等服務(wù)建站,青羊等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為青羊企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

################

下文出處:

    http://xiachaofeng.iteye.com/blog/1405184

今天遇見一個(gè)問題,crontab的定時(shí)任務(wù)不能自動(dòng)執(zhí)行,但是手動(dòng)執(zhí)行腳本一直能成功。查到最后,發(fā)現(xiàn)是腳本里用了系統(tǒng)的環(huán)境變量。下面開始解釋:

1.crontab與環(huán)境變量
不要假定cron知道所需要的特殊環(huán)境,它其實(shí)并不知道。所以你要保證在shelll腳本中提供所有必要的路徑和環(huán)境變量,除了一些自動(dòng)設(shè)置的全局變量。所以注意如下3點(diǎn):

1)腳本中涉及文件路徑時(shí)寫全局路徑;

2)腳本執(zhí)行要用到j(luò)ava或其他環(huán)境變量時(shí),通過source命令引入環(huán)境變量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)當(dāng)手動(dòng)執(zhí)行腳本OK,但是crontab死活不執(zhí)行時(shí)。這時(shí)必須大膽懷疑是環(huán)境變量惹的禍,并可以嘗試在crontab中直接引入環(huán)境變量解決問題。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

2.其他應(yīng)該注意的問題
1)新創(chuàng)建的cron job,不會(huì)馬上執(zhí)行,至少要過2分鐘才執(zhí)行。如果重啟cron則馬上執(zhí)行。
2)每條 JOB 執(zhí)行完畢之后,系統(tǒng)會(huì)自動(dòng)將輸出發(fā)送郵件給當(dāng)前系統(tǒng)用戶。日積月累,非常的多,甚至?xí)伪麄€(gè)系統(tǒng)。所以每條 JOB 命令后面進(jìn)行重定向處理是非常必要的: >/dev/null 2>&1 。前提是對(duì) Job 中的命令需要正常輸出已經(jīng)作了一定的處理, 比如追加到某個(gè)特定日志文件。
3)當(dāng)crontab突然失效時(shí),可以嘗試/etc/init.d/crond restart解決問題?;蛘卟榭慈罩究茨硞€(gè)job有沒有執(zhí)行/報(bào)錯(cuò)tail -f /var/log/cron。
4)千萬別亂運(yùn)行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除用戶的Crontab文件。刪除了該用戶的所有crontab都沒了。
5)在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進(jìn)行轉(zhuǎn)義\%,如經(jīng)常用的date ‘+%Y%m%d’在crontab里是不會(huì)執(zhí)行的,應(yīng)該換成date ‘+\%Y\%m\%d’`。

3.rontab中的輸出配置

crontab中經(jīng)常配置運(yùn)行腳本輸出為:>/dev/null 2>&1,來避免crontab運(yùn)行中有內(nèi)容輸出。

shell命令的結(jié)果可以通過‘> ’的形式來定義輸出

/dev/null 代表空設(shè)備文件  

> 代表重定向到哪里,例如:echo "123" > /home/123.txt 

1 表示stdout標(biāo)準(zhǔn)輸出,系統(tǒng)默認(rèn)值是1,所以">/dev/null"等同于"1>/dev/null"

2 表示stderr標(biāo)準(zhǔn)錯(cuò)誤

& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1 

那么重定向輸出語句的含義:

1>/dev/null 首先表示標(biāo)準(zhǔn)輸出重定向到空設(shè)備文件,也就是不輸出任何信息到終端,不顯示任何信息。

2>&1 表示標(biāo)準(zhǔn)錯(cuò)誤輸出重定向等同于標(biāo)準(zhǔn)輸出,因?yàn)橹皹?biāo)準(zhǔn)輸出已經(jīng)重定向到了空設(shè)備文件,所以標(biāo)準(zhǔn)錯(cuò)誤輸出也重定向到空設(shè)備文件。

###################################################

排查發(fā)現(xiàn)/etc/profile中沒有export /usr/local 路徑。所以對(duì)于hadoop和java的path只能是手動(dòng)export到腳本中了,或者說也可以賦值到變量中:

    export JAVA_HOME="/usr/local/jdk1.6.0_45"

    hadoop='/usr/local/hadoop-2.4.0/bin/hadoop'

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:crontab環(huán)境變量問題-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://muchs.cn/article28/cdiijp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作App設(shè)計(jì)、網(wǎng)站導(dǎo)航網(wǎng)站建設(shè)、云服務(wù)器手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)