[英]Sequence of PHP Scripts in Bash script executed by Cron not running
我有四個PHP腳本,執行需要按順序執行的各種任務。
而不是為每個PHP腳本創建一個cron條目,我認為我會聰明並將其包裝為Bash腳本,如下所示:
#!/bin/bash
# set notification email.
NOTIFYEMAIL="webmaster@example.com"
# set PHP path.
PHP="$(which php)"
# set folder path.
FOLDER="/var/www/example.com/processors/"
# list of scripts.
SCRIPTS=("script_1" "script_2" "script_3" "script_4")
# execute each script.
for i in "${SCRIPTS[@]}"
do
SCRIPT="$FOLDER/$i.php"
printf "Processing: %s\n" $i
chmod +x $SCRIPT
$PHP $SCRIPT
done
echo "Scripts have been processed." | mail -s "Scripts Processed" $NOTIFYEMAIL
我已經單獨測試了所有腳本,並且它們正常工作,將處理信息輸出到終端。
/usr/bin/php /var/www/example.com/processors/script_1.php
我甚至測試了bash腳本,該腳本按順序調用四個PHP腳本,通過終端手動調用,也可以正常工作。
/bin/bash /var/www/example.com/processors/run.sh
但由於某種原因,當我離開cron在root用戶crontab上使用以下命令運行它們時,PHP腳本不會執行。
# process daily.
0 1 * * * /bin/bash /var/www/example.com/processors/run.sh > /dev/null
我知道crontab已被處理並且Bash腳本已經運行,因為我總是在腳本結束時每次都收到通知電子郵件。
權限如下:
-rwxr-xr-x 1 root root 510 Mar 11 09:21 run.sh
-rwxrwxr-x 1 git git 2.8K Mar 8 10:17 script_1.php
-rwxrwxr-x 1 git git 2.6K Mar 1 18:07 script_2.php
-rwxrwxr-x 1 git git 717 Mar 1 18:07 script_3.php
-rwxrwxr-x 1 git git 6.8K Mar 4 16:30 script_4.php
沒有特定於cron的日志文件,例如/var/log/cron.log
但是當我運行grep CRON /var/log/syslog
並返回以下通用輸出時:
Mar 11 06:39:01 s00000000 CRON[11651]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Mar 11 07:09:01 s00000000 CRON[12771]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Mar 11 07:17:01 s00000000 CRON[13074]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
任何建議讓我嘗試的將不勝感激。
檢查在crontab中是否正確設置了SHELL
和PATH
的值,例如:
SHELL=/bin/bash PATH=/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/local/sbin:/usr/sbin
PATH
訪問所有需要的二進制文件。 %
。 有關詳細信息,請參閱man 5 crontab
。 也許您還將環境變量MAILTO
設置為approbate值,例如:
MAILTO="webmaster@example.com"
確保您的crontab被正確解析的另一個小技巧是在末尾添加一個標記條目。
我正在使用這個標記條目
@daily logger -p local0.notice -t CRON'$ Id:demo 7029 2012-11-27 09:27:39Z dirk $'
如果syslog中缺少標記條目,則表示crontab已損壞。 這可能是由您未見過的一些奇怪的語法錯誤引發的。
如果一個cron作業無法正常工作,請首先調查作業輸出。
將您的crontab更改為:
0 1 * * * /bin/bash -x /var/www/example.com/processors/run.sh >>/tmp/cronTrace 2>&1
請調查生成的腳本輸出以及跟蹤輸出( bash -x
)。
chmod +x $SCRIPT
$PHP $SCRIPT
chmod
步驟不是必需的,應該避免。 在下一行中,您通過顯式使用interpreter命令來調用腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.