crontab失敗的解決過程
1.問題描述:
在使用crontab定時執行釋出包sql指令碼解析工作時,出現了一個奇怪的問題,
指令碼執行到生成release_xxxx.tmp檔案就終止執行了,且release_xxxx.tmp
檔案是空的。但是以同樣的方式手動執行dbmisProject.sh指令碼卻可以正常執行。
2.解決辦法
將crontab的輸出結果重定向到一個日誌檔案中,以記錄crontab執行的過程中發生了什麼錯誤。
(1)修改現有的crontab任務
0 3 * * 4 sh /home/dbmisTool/bin/dbmisProject.sh > /dev/null 2>&1
為
0 3 * * 4 sh /home/dbmisTool/bin/dbmisProject.sh > /tmp/dbmisProject.log 2>&1
這樣,只要在週四檢視dbmisProject.log檔案即知道crontab任務失敗的原因了。
(2)週四檢視dbmisProject.log中的內容如下:
/home/dbmisTool/bin/dbmisProject.sh: line 118: svn: command not found
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
/home/dbmisTool/bin/dbmisProject.sh: line 185: sqlplus: command not found
cat: /home/dbmisTool/tmp/report_20091126.txt: No such file or directory
Null message body; hope that's ok
原來是環境變數的問題,crontab在執行的時候只會定義少數環境變數而不是繼承使用者shell環境中的環境變數。因為svn: command not found和sqlplus: command not found說明找不到命令,其實是找不到這兩個命令對應的可執行檔案所在的目錄。
(3)在指令碼中新增了source /root/.bash_profile命令,在crontab執行指令碼時將root使用者的環境變數載入進去。
發現dbmisProject.log中的報錯資訊已經由
/home/dbmisTool/bin/dbmisProject.sh: line 118: svn: command not found
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
/home/dbmisTool/bin/dbmisProject.sh: line 185: sqlplus: command not found
cat: /home/dbmisTool/tmp/report_20091126.txt: No such file or directory
Null message body; hope that's ok
變為
/home/dbmisTool/bin/dbmisProject.sh: line 123: svn: command not found
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
ls: /disk2/db_release: No such file or directory
cat: /home/dbmisTool/tmp/report_20091203.txt: No such file or directory
Null message body; hope that's ok
即sqlplus命令已經可以找到,但是svn命令還是無法找到,但是使用man svn是可以檢視到的幫助資訊的。which指令會在環境變數$PATH設定的目錄裡查詢符合條件的檔案。
使用which命令檢視svn所在的目錄:
[root@db_dev_bak disk2]# which svn
/usr/local/bin/svn
於是將svn所在的路徑加在了svn前面,即對svn命令作如下修改:
修改原命令
svn co --username=xxxxx --password=xxxx http://svn.xxxx.net/xxxx/socdocs/trunk/devdba/db_release/
為
/usr/local/bin/svn co --username=xxxxx --password=xxxx http://svn.xxxx.net/xxxx/socdocs/trunk/devdba/db_release/
再看此時crontab任務生成的的dbmisProject.log,之前的svn: command not found錯誤已經消失,取而代之的是一個新的錯誤:
svn: Can't convert string from 'UTF-8' to native encoding:
svn: db_release/20090701?\232?\161?\165
cat: /home/dbmisTool/tmp/report_20091203.txt: No such file or directory
Null message body; hope that's ok
cron job在執行的時候只會定義少數環境變數而不是繼承使用者shell環境中的環境變數,所以在svn碰到含有cron job環境中
設定的字符集不能處理的字元的檔名時會導致檢出失敗。
解決方法就是在指令碼中加入:
export LC_CTYPE=zh_CN.GB18030
之前在網上看到有的是載入en_US.UTF-8字符集,但是我試了一下,在系統上顯示是亂碼,這個還是要因系統而異。
經過以上對指令碼的修改,終於大功告成,定時任務可以正常執行了。
PS:在完成對這個定時任務的修正以後得到了一個更為簡單的方法,即只要在指令碼中加入以下即可:
source /etc/profile
source /etc/sysconfig/i18n
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2120863/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決linux crontab備份mysql失敗的問題LinuxMySql
- kodbox讀取alist檔案失敗,問題解決過程
- Android加殼過程中mprotect呼叫失敗的原因及解決方案Android
- 在打包過程中小米手機的apk圖示失敗的解決方法APK
- sql server資料庫連線失敗/無法附加解決過程SQLServer資料庫
- 檔案系統異常引起的資料庫open失敗的解決過程資料庫
- 使用ruby過程中遇到安裝gem失敗的一些通用解決方案
- 建立資料庫連線失敗ORA-12514的分析解決過程資料庫
- Token驗證失敗的解決方法
- MySql安裝過程中初始化失敗MySql
- dbsnmp啟動失敗解決方法
- 解決Autowired注入失敗為nullNull
- 監聽啟動失敗解決
- SVN clean失敗解決方法【轉】
- npm install失敗解決方法NPM
- npm安裝失敗解決方案NPM
- git clone失敗問題解決Git
- pyhanlp下載失敗解決方法HanLP
- npm install過程失敗的幾種處理方法NPM
- puppeteer 安裝失敗的解決辦法
- Linux Yum 安裝失敗處理過程整理Linux
- ORACLE 資料庫分析,重新編譯失敗過程Oracle資料庫編譯
- 企業資料中臺實施過程中失敗的因素
- NPM run dev 失敗解決辦法NPMdev
- 解決linux rz傳輸失敗Linux
- npm install 失敗解決辦法NPM
- anaconda安裝失敗解決方法
- redis lRem 刪除失敗?(已解決)RedisREM
- hbase啟動失敗問題解決
- npm install失敗解決辦法NPM
- 解決Linux下AES解密失敗Linux解密
- mongodb啟動失敗問題解決MongoDB
- 關於npm install失敗的解決方法NPM
- go get下載包失敗的解決方案Go
- 對USB驅動下載失敗的解決
- 遠端連線 Mysql 失敗的解決方法MySql
- TortoiseSVN 執行清理( cleanUp )失敗的解決方案
- npm 安裝 chromedriver 失敗的解決辦法NPMChrome