欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Linux系統(tǒng)crontab定時運(yùn)行shell腳本失敗的問題及解決

 更新時間:2023年04月07日 14:42:43   作者:我叫瘦企鵝  
這篇文章主要介紹了Linux系統(tǒng)crontab定時運(yùn)行shell腳本失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1.最近開始學(xué)習(xí)Linux系統(tǒng)使用

經(jīng)過一段時間學(xué)習(xí)終于學(xué)到了shell腳本,因?yàn)閷W(xué)的東西比較零散,突發(fā)奇想我學(xué)過了crontab定時任務(wù),今天也學(xué)了shell腳本的編寫,為何不組合一下,既能提升學(xué)習(xí)深度,又能鍛煉自學(xué)能力,何樂而不為呢?但是沒想到,我已步入了Linux的坑。

2.腳本倒是很簡單

因?yàn)閯倢W(xué)習(xí),寫的命令都很簡單,請各位大神不要笑我,我寫這篇博客目的一是為了記錄踩過的坑,加深映像,二是給和我一樣的新手提個醒,避免長時間陷入到坑里。

以下是我shell腳本的代碼

#!/bin/bash
date >> /myshell/date.log

 這個腳本的作用是每次運(yùn)行該腳本,將當(dāng)前時間累加寫入在/myshell/文件夾下的date.log文件中

首先我們要給這個腳本添加執(zhí)行權(quán)限用添加權(quán)限的命令就行了

chmod 777 time.sh

目前我遇到的問題是要執(zhí)行該腳本,目前只能在腳本所在目錄用./time.sh執(zhí)行。所以為了解決這個問題,我經(jīng)過思考和某度,找到了兩種方式讓我們的腳本在其他目錄直接使用time.sh命令都可以運(yùn)行腳本。

第一種

我們使用$PATH查看系統(tǒng)現(xiàn)有的環(huán)境變量目錄,也就是如果將我們的腳本放到這些任一個目錄中,就可以在其他目錄使用time.sh來運(yùn)行我們的腳本。

但是由于這些目錄存放的文件都是比較重要的。

或是系統(tǒng)文件,所以這種方式我覺得不太推薦,當(dāng)然,高手的話隨意就行,對于我這種初學(xué)者的話就盡量避開這種危險的東西。

第二種

我思考既然通過$PATH看到的這些目錄,把腳本放進(jìn)去就可以在其他地方運(yùn)行,那我們應(yīng)該也可以把我們寫的腳本所在的目錄添加到這個環(huán)境變量中,這樣就可以達(dá)到我們的目的,于是根據(jù)這個思路,我又進(jìn)行了某度,找到了解決方法。

可以用

vim /etc/profile

打開這個文件,在文件中添加如下代碼:

export PATH=/myshell:$PATH

添加后保存退出,這段代碼的原理就是在系統(tǒng)調(diào)用這個文件的時候,將環(huán)境變量PATH和我們需要自定義的目錄拼接起來重新生成的PATH環(huán)境變量替換以前的,達(dá)到我們需要設(shè)置自定義目錄的目的,要讓我們編輯的內(nèi)容生效,相當(dāng)于讓系統(tǒng)重新加載我們修改過的這個文件

用如下命令就行:

source /etc/profile

這樣,再用$PATH命令查看,就可以看到我們自定義的文件夾也到PATH這個環(huán)境變量的值中了。

這時候執(zhí)行一下命令time.sh發(fā)現(xiàn)/myshell目錄下就多了一個date.log文件了。

再其他目錄執(zhí)行time.sh命令,然后查看date.log命令,相應(yīng)時間也在文件中累加了。

原以為再用crontab把定時執(zhí)行任務(wù)設(shè)置好就大功告成,可是更大的坑才剛剛開始。

添加定時執(zhí)行任務(wù)

* 11 * * * time.sh

這個任務(wù)意思就是在十一點(diǎn)到十二點(diǎn)這個范圍內(nèi),每隔一分鐘執(zhí)行一下time.sh這個腳本。具體的語法不知道的初學(xué)者可以某度一下,資料很多的。

重啟一下crontab服務(wù)

service crond restart

然后使用命令實(shí)時查看date.log文件累加內(nèi)容的情況

tail -f date.log

等了很長時間,內(nèi)容都沒變,是定時任務(wù)沒執(zhí)行成功?還是腳本出錯了?

然后趕緊瘋狂某度一下crontab運(yùn)行的日志記錄文件存放位置,實(shí)時更新查看一下:

tail -f /var/log/cron

等了幾分鐘,發(fā)現(xiàn)每隔一分鐘定時任務(wù)有執(zhí)行記錄

97215982583c4a7ea3d14d8499219f55.png

但是查看date.log文件,發(fā)現(xiàn)內(nèi)容并沒有累加。

看來可能是crontab執(zhí)行時候出錯了。

于是修改定時任務(wù)語句,將定時任務(wù)執(zhí)行的錯誤信息也寫入到date.log文件中,看看報(bào)錯內(nèi)容是什么。

將定時任務(wù)修改為以下代碼

* 11 * * * time.sh >> /myshel/date.log 2>&1

等幾分鐘,查看date.log的內(nèi)容,顯示如下

4946ade9cf7e43089c750335a620efe1.png

沒有找到命令,可是我剛才不管是在文件目錄還是其他目錄都執(zhí)行成功腳本了啊,為什么crontab執(zhí)行還是報(bào)錯找不到腳本呢?

會不會是環(huán)境變量的問題呢,帶著猜想我再次進(jìn)行某度,過程很艱辛,最后算是證實(shí)我的猜想是對的,就是系統(tǒng)環(huán)境變量和crontab使用的環(huán)境變量不一樣導(dǎo)致的,其中過程由于篇幅有限,我就不細(xì)述了,直接說解決辦法

最后我找到兩解決辦法 

第一:定時任務(wù)語句中以root用戶來執(zhí)行,修改定時任務(wù)語句如下:

* 11 * * * su - root -c time.sh

而后發(fā)現(xiàn)腳本成功執(zhí)行了。

第二:定時任務(wù)腳本前面加上腳本所在目錄絕對路徑,定時任務(wù)語句修改為:

* 11 * * * /myshell/time.sh

再次觀察,腳本也成功執(zhí)行了。

當(dāng)然,我還查到了其他很多方法,時間有限,沒有一一測試,大家有興趣的話可以多試試其他方法。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論