日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Linux Crontab內(nèi)環(huán)境變量與Shell環(huán)境變量的關(guān)系及解決問(wèn)題的辦法

 Harrison.Ding 2014-04-18

為了定時(shí)監(jiān)控Linux系統(tǒng)CPU、內(nèi)存、負(fù)載的使用情況,寫了個(gè)Shell腳本,當(dāng)達(dá)到一定值得時(shí)候,發(fā)送郵件通知。需要用到Crontab的定時(shí)任務(wù)去執(zhí)行這個(gè)腳本,但是發(fā)現(xiàn)通過(guò)命令(./test.sh)執(zhí)行Shell文件的時(shí)候,可以獲取Linux的環(huán)境變量;可是通過(guò)Crontab做的定時(shí)任務(wù),無(wú)法獲取。

查找資料之后發(fā)現(xiàn),crontab有一個(gè)壞毛病,就是它總是不會(huì)缺省的從用戶profile文件中讀取環(huán)境變量參數(shù),經(jīng)常導(dǎo)致在手工執(zhí)行某個(gè) 腳本時(shí)是成功的,但是到crontab中試圖讓它定期執(zhí)行時(shí)就是會(huì)出錯(cuò)。

2種方法可以解決這個(gè)問(wèn)題,

1、在Shell文件里面獲取環(huán)境變量值的路徑寫成絕對(duì)路徑,別用環(huán)境變量的路徑值。例如獲取CPU的使用情況  通過(guò)絕對(duì)路徑/proc/cpuinfo 來(lái)獲取值;

2、Shell腳本缺省的#!/bin/sh開(kāi)頭換行后的第一行用

#!/bin/sh

. /etc/profile

. ~/.bash_profile

這樣,crontab在執(zhí)行腳本的時(shí)候,就能夠讀到用戶的環(huán)境變量參數(shù)

備注:

如果你是在cron里提交的,請(qǐng)注意:

不要假定c r o n知道所需要的特殊環(huán)境,它其實(shí)并不知道。所以你要保證在s h e l l腳本中提供所有必要的路徑和環(huán)境變量,除了一些自動(dòng)設(shè)置的全局變量。

 

分享一些關(guān)于Crontab的小知識(shí)

但是最近在使用crontab過(guò)程中,接連遇到頭疼的問(wèn)題:手動(dòng)執(zhí)行腳本時(shí)一點(diǎn)問(wèn)題都沒(méi)有,可是放在 crontab中腳本死活也不運(yùn)行。最后查出來(lái)原因一次是因?yàn)槟_本里面文件路徑?jīng)]有寫全路徑導(dǎo)致的,另一次是因?yàn)槟_本運(yùn)行需要依賴java環(huán)境變量,其實(shí) 兩次都是環(huán)境變量的問(wèn)題造成的。從網(wǎng)上同樣了解到一般crontab無(wú)法運(yùn)行的問(wèn)題都是由環(huán)境變量在crontab中不一定可識(shí)別引起的。某前輩總結(jié) 說(shuō):crontab如果不注意的話早晚會(huì)出問(wèn)題,而且這種問(wèn)題一旦出一次,就會(huì)永遠(yuǎn)記得,因?yàn)檫@種問(wèn)題很折騰人。精辟啊~~
下面我也來(lái)試試總結(jié)下crontab的基本用法,環(huán)境變量以及其他要注意的問(wèn)題。各位看官可以參考下,有什么問(wèn)題也可以留言討論。
————————————————————————————
1.crontab的基本用法
Usage: crontab [-u user] [-e|-l|-r]
Crontab 的格式說(shuō)明如下:
* 逗號(hào)(‘,’) 指定列表值。如: “1,3,4,7,8″
* 中橫線(‘-’) 指定范圍值 如 “1-6″, 代表 “1,2,3,4,5,6″
* 星號(hào) (‘*’) 代表所有可能的值
*/15 表示每 15 分鐘執(zhí)行一次
# Use the hash sign to prefix a comment
# +—————- minute (0 – 59)
# |  +————- hour (0 – 23)
# |  |  +———- day of month (1 – 31)
# |  |  |  +——- month (1 – 12)
# |  |  |  |  +—- day of week (0 – 7) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *  command to be executed
2.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í),通過(guò)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)境變量解決問(wèn)題。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
3.其他應(yīng)該注意的問(wèn)題
1)新創(chuàng)建的cron job,不會(huì)馬上執(zhí)行,至少要過(guò)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解決問(wèn)題?;蛘卟榭慈罩究茨硞€(gè)job有沒(méi)有執(zhí)行/報(bào)錯(cuò)tail -f /var/log/cron。
4)千萬(wàn)別亂運(yùn)行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除用戶的Crontab文件。刪除了該用戶的所有crontab都沒(méi)了。
5)在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進(jìn)行轉(zhuǎn)義\%,如經(jīng)常用的date ‘+%Y%m%d’在crontab里是不會(huì)執(zhí)行的,應(yīng)該換成date ‘+\%Y\%m\%d’`。
—————————————————————————————–
/etc/profile, /etc/bashrc, .bash_profile和.bashrc的差別
用戶登陸Linux操作系統(tǒng)的時(shí)候,”/etc/profile”, “~/.bash_profile”等配置文件會(huì)被自動(dòng)執(zhí)行。執(zhí)行過(guò)程是這樣的:登陸Linux系統(tǒng)時(shí),首先啟動(dòng)”/etc/profile”,然后啟動(dòng) 用戶目錄下的”~/.bash_profile”,如果”~/.bash_login”和”~/.profile”文件存在的時(shí)候也會(huì)在執(zhí)行”~ /.bash_profile”后被依次調(diào)用。
——————
cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
alias vi=vim
通過(guò)上面腳本可以看到~/.bash_profile文件先調(diào)用~/.bashrc,然后再把PATH加載。
——————
下面是一些區(qū)別:
/etc/profile:此文件為系統(tǒng)的每個(gè)用戶設(shè)置環(huán)境信息,當(dāng)用戶第一次登錄時(shí),該文件被執(zhí)行,并從/etc/profile.d目錄的設(shè)置文件中搜集shell的設(shè)置;
/etc/bashrc:為每一個(gè)運(yùn)行bash shell的用戶執(zhí)行此文件,當(dāng)bash shell被打開(kāi)時(shí),該文件被讀?。?/div>
~/.bash_profile:每個(gè)用戶都可使用該文件輸入專用于自己使用的shell信息,當(dāng)用戶登錄時(shí),該文件僅僅執(zhí)行一次!默認(rèn)情況下,他設(shè)置一些環(huán)境變量,執(zhí)行用戶的.bashrc文件,
~/.bashrc:該文件包含專用于你的bash shell的bash信息,當(dāng)?shù)卿洉r(shí)及每次打開(kāi)新的shell時(shí),該文件被讀??;
~/.bash_logout:當(dāng)每次退出系統(tǒng)(退出bash shell)時(shí),執(zhí)行該文件;
——–
/etc/profile是全局性的功能,其中設(shè)置的變量作用于所有用戶,~/.bash_profile中設(shè)置的變量能繼承/etc/profile中的變量并作用于用戶。
~/.bash_profile 是交互式、login 方式進(jìn)入 bash 運(yùn)行的;~/.bashrc 是交互式 non-login 方式進(jìn)入 bash 運(yùn)行的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多