crontab 提示 command not found 解決方案


crontab的定時任務會報錯:command not found,手動執行腳本能成功。

1.crontab與環境變量

cron並不知道所需要的特殊環境變量。所以要保證在shelll腳本中提供所有必要的路徑和環境變量,除了一些自動設置的全局變量。注意如下3點:

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

2)腳本執行要用到程序或其他環境變量時,通過source命令引入環境變量,如:

#!/bin/bash
source /etc/profile
/usr/local/php/bin/php think sitespeed

或者在root的crontab文件中加入:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

3)當手動執行腳本OK,但是crontab不執行時。是環境變量問題,可以在crontab中直接引入環境變量解決。如:
0 * * * *  /etc/profile;/bin/bash /home/scripts/test.sh >/dev/null 2>&1

2.其他應該注意的問題

1)新創建的cron job,不會馬上執行,至少要過2分鍾才執行。如果重啟cron則馬上執行。
2)每條 JOB 執行完畢之后,系統會自動將輸出發送郵件給當前系統用戶。日積月累,非常的多,甚至會撐爆整個系統。所以每條 JOB 命令后面進行重定向處理是非常必要的: >/dev/null 2>&1 。前提是對 Job 中的命令需要正常輸出已經作了一定的處理, 比如追加到某個特定日志文件。
3)當crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或者查看日志看某個job有沒有執行/報錯tail -f /var/log/cron。
4)別亂運行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除用戶的Crontab文件。刪除了該用戶的所有crontab都沒了。
5)在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉義\%,如經常用的date `+%Y%m%d`在crontab里是不會執行的,應該換成date `+\%Y\%m\%d`。

3.crontab中的輸出配置

crontab中經常配置運行腳本輸出為:>/dev/null 2>&1,來避免crontab運行中有內容輸出。

shell命令的結果可以通過 '>' 的形式來定義輸出

/dev/null 代表空設備文件  

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

1 表示stdout標准輸出,系統默認值是1,所以">/dev/null"等同於"1>/dev/null"

2 表示stderr標准錯誤

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

重定向輸出語句的含義:

1>/dev/null 首先表示標准輸出重定向到空設備文件,就是不輸出任何信息到終端,不顯示任何信息。

2>&1 表示標准錯誤輸出重定向等同於標准輸出,因為之前標准輸出已經重定向到了空設備文件,所以標准錯誤輸出也重定向到空設備文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM