真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解決Linux中crontab定時(shí)任務(wù)未執(zhí)行的錯(cuò)誤

本篇文章為大家展示了如何解決Linux中crontab定時(shí)任務(wù)未執(zhí)行的錯(cuò)誤,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司專注于峨邊彝族企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城開發(fā)。峨邊彝族網(wǎng)站建設(shè)公司,為峨邊彝族等地區(qū)提供建站服務(wù)。全流程按需規(guī)劃網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

crontab 就是一個(gè)定時(shí)任務(wù)了。但有一些網(wǎng)友配置好crontab后發(fā)現(xiàn)第二天起來沒有執(zhí)行指定任務(wù)了,那么這個(gè)問題有權(quán)限,限制等等原因,我們來給各位總結(jié)一下關(guān)于crontab不執(zhí)行的解決辦法。

沒有按照規(guī)范寫以下的shell腳本導(dǎo)致執(zhí)行失敗通過CentOS中的定時(shí)任務(wù)執(zhí)行shell腳本失敗,進(jìn)行排查:
1)手動(dòng)執(zhí)行shell腳本(sh backup.sh)成功執(zhí)行,排除sh腳本的語法錯(cuò)誤。
2)通過nano /etc/crontab命令查看定時(shí)任務(wù),發(fā)現(xiàn)除過執(zhí)行sh的定時(shí)任務(wù)外,其他任務(wù)都能正常執(zhí)行。檢查其代碼,

發(fā)現(xiàn)對(duì)SHELL、PATH、MAILTO、HOME還沒有好好了解過,以往都是注意下面的時(shí)間規(guī)則,所以查了一下定義:
1)SHELL,變量的值指定shell 環(huán)境(此處默認(rèn)為 bash shell); 
2)PATH,變量定義用來執(zhí)行命令的程序路徑;
3)MAILTO,任務(wù)的輸出被郵寄給 MAILTO 變量定義的用戶名,如果變量被定義為空白字符串,電子郵件就不會(huì)被寄出; 
4)HOME,變量可以用來設(shè)置在執(zhí)行命令或腳本時(shí)使用的主目錄;
隨后看到SHELL的定義先用env一下看一下系統(tǒng)默認(rèn)shell是哪個(gè)地址,

[root@AY data]# env
HOSTNAME=AY
TERM=xterm
SHELL=/bin/bash
...
隨后打開shell腳本查看,果然沒有對(duì)shell腳本配置地址。好了,找到了一個(gè)問題,下面就根據(jù)文檔說明在shell腳本開始的地方打上該shell地址,如我的env是SHELL=/bin/bash,那么shell腳本開始就應(yīng)該如下:

#!/bin/bash  
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin  
export PATH
添加完后重啟服務(wù)service crond restart,檢查腳本運(yùn)行情況,順利執(zhí)行~

這次是按排除法檢查了錯(cuò)誤原因,主要還是由于沒有按照規(guī)范寫下的shell腳本導(dǎo)致執(zhí)行失敗。

下面再列出幾個(gè)常見的沒有按規(guī)范編寫shell會(huì)出現(xiàn)的問題:
1)由于啟動(dòng)腳本用的是系統(tǒng)的crontab所以必須定義sh文件的目錄以及具體日志的具體路徑
2)注意使用加減法使用((num=$line+1))兩個(gè)括號(hào)來進(jìn)行弱類型轉(zhuǎn)換
3)注意if判斷大小于使用[[]]來進(jìn)行,例如:if [[ $count > 0 ]],等于則可以使用一個(gè)[]即可

問題解決思路:
1. 判斷crontab是否有執(zhí)行過,你可以添加一個(gè)每分鐘執(zhí)行的寫文件的小腳本進(jìn)行測試,如果有記錄說明crontab本身服務(wù)沒有問題.
如: Feb 7 14:45:01 1280859075761a8Z crond[13638]: (root) CMD (/backuptoqiniu/backuptoqiniu.sh )這里面應(yīng)該是表示crontab已經(jīng)成功執(zhí)行了的,所以crontab服務(wù)沒有問題.
2. 其實(shí)有經(jīng)驗(yàn)多半就會(huì)知道crontab的執(zhí)行是沒有相關(guān)環(huán)境變量的,解決辦法就是在腳本中打日志,另外默認(rèn)將所有的命令采用全路徑的方式.
調(diào)試方法:添加日志文件,將原來所有的echo 全部可以嘗試追加到日志文件,或者在crontab寫的時(shí)候追加日志.
45 14 * * * /backuptoqiniu/backuptoqiniu.sh >> /tmp/out.log 2>&1
ases.sql" -u $MySQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS $DATEBASE > "$NOW-Datab
我就沒有看懂你這個(gè)是什么,是不是自己的命令不在默認(rèn)的系統(tǒng)命令里面.

測試方法: 測試crontab的PATH與手動(dòng)執(zhí)行的PATH不一樣.
可以在crontab的腳本里面添加個(gè)echo $PATH > /tmp/1.log
對(duì)比和你手動(dòng)的終端下執(zhí)行的echo $PATH

方法三,再看一個(gè)例子
crontab定時(shí)任務(wù)不執(zhí)行的原因1、腳本語法錯(cuò)誤在crontab腳本沒有定時(shí)執(zhí)行的時(shí)候,首先需要檢查腳本的語法有沒有出現(xiàn)問題。
2、環(huán)境變量問題有時(shí)我們創(chuàng)建了一個(gè)crontab,但是這個(gè)任務(wù)卻無法自動(dòng)執(zhí)行,而手動(dòng)執(zhí)行這個(gè)任務(wù)卻沒有問題,這種情況一般是由于在crontab文件中沒有配置環(huán)境變量引起的。我們?cè)谑謩?dòng)執(zhí)行任務(wù)時(shí)是在當(dāng)前shell環(huán)境下進(jìn)行的,程序能夠找到環(huán)境變量,而系統(tǒng)自動(dòng)執(zhí)行任務(wù)調(diào)度時(shí),是不會(huì)加載任何環(huán)境變量的。因此,我們需要在shelll腳本中提供所有必要的路徑和環(huán)境變量。

需要注意的主要有以下三點(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
3、系統(tǒng)任務(wù)調(diào)度及用戶任務(wù)調(diào)度系統(tǒng)任務(wù)調(diào)度主要完成系統(tǒng)的一些維護(hù)操作,用戶任務(wù)調(diào)度主要完成用戶自定義的一些任務(wù),可以將用戶任務(wù)調(diào)度放到系統(tǒng)任務(wù)調(diào)度來完成(不建議這么做),但是反過來卻不行,root用戶的任務(wù)調(diào)度操作可以通過“crontab –uroot –e”來設(shè)置,也可以將調(diào)度任務(wù)直接寫入/etc/crontab文件,需要注意的是,如果要定義一個(gè)定時(shí)重啟系統(tǒng)的任務(wù),就必須將任務(wù)放到/etc/crontab文件,即使在root用戶下創(chuàng)建一個(gè)定時(shí)重啟系統(tǒng)的任務(wù)也是無效的。
crontab定時(shí)任務(wù)不執(zhí)行的解決辦法
1、查看crontab執(zhí)行記錄如果出現(xiàn)了crontab定時(shí)任務(wù)不執(zhí)行的情況,首先需要定位問題,那么就需要通過日志來確定問題所在。
crontab的日志位置一般位于/var/log/cron,利用下面的語句即可查看日志。
tail -f /var/log/cron
上面的/var/log/cron只會(huì)記錄是否執(zhí)行了某些計(jì)劃的腳本,但是具體執(zhí)行是否正確以及腳本執(zhí)行過程中的一些信息linux會(huì)通過郵件形式發(fā)送到給該用戶。
對(duì)于root用戶該郵件記錄位于/var/spool/mail/root,通過以下命令可以查看最近的crontab執(zhí)行情況。
tail -f /var/spool/mail/root
mail郵件一般只會(huì)記錄腳本執(zhí)行成功與否,如果執(zhí)行失敗,無法給出進(jìn)一步的錯(cuò)誤信息,這時(shí)需要我們將語句執(zhí)行的錯(cuò)誤信息重定向至文件中,這樣可以很方便的查看錯(cuò)誤信息。下面就給出了一個(gè)簡單的例子
0 6 * * * /root/script/ss.sh >> /root/for_crontab/mylog.log 2>&1
上述語句表示把錯(cuò)誤輸出和標(biāo)準(zhǔn)輸出都輸出到mylog.log中,在執(zhí)行的時(shí)候會(huì)將命令執(zhí)行的相關(guān)信息記錄至mylog.log文件中。
2、解決問題在經(jīng)過上一步的問題定位之后,就可以很容易找到問題并解決。

上述內(nèi)容就是如何解決Linux中crontab定時(shí)任務(wù)未執(zhí)行的錯(cuò)誤,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前名稱:如何解決Linux中crontab定時(shí)任務(wù)未執(zhí)行的錯(cuò)誤
URL分享:http://weahome.cn/article/gioeih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部