PHP 腳本未通過 cron 執行
雖然我檢查了 cron 的規範問題,但我無法解決問題。 為什麼我的 crontab 不工作,我該如何排除故障?
所以,我來了:
我有一個查詢 MySQL 和 IBM Informix 數據庫(位於其他主機)、生成 json 文件、處理資訊並將其插入 MySQL 數據庫的 php 腳本。
該腳本有一個主文件和另一個具有查詢處理功能的文件。保持這樣:
/opt/project script.php functions.php
script.php 需要 functions.php 文件和基因
我可以使用絕對或相對路徑順利執行腳本。
/opt/project 內部:
# php script.php
別的地方:
# /usr/bin/php /opt/project/scrpt.php
但是,當它由 cron 作業執行時,它不起作用。我確實已經設置了通知環境變數,執行了日誌測試,甚至創建了一個 shell 腳本來執行 script.php,而 cron 執行 shell 腳本。
伺服器路徑(CentOS 7):/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin
crontab 內容試過:
SHELL=/usr/local/bin PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin */14 * * * * /usr/bin/php /opt/project/script.php
使用 root 提前命令:
SHELL=/usr/local/bin PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin */14 * * * * root /usr/bin/php /opt/project/script.php
更改目錄:
SHELL=/usr/local/bin PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin */14 * * * * cd /opt/project && /usr/bin/php script.php
cron 直接執行 shell 腳本而不是 php:
SHELL=/usr/local/bin PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin */14 * * * * cd /opt/project && sh run_script.sh
其中shell腳本有以下內容:
#!/usr/bin/env bash cd /opt/project PHP=`which php` $PHP script.php
cron 日誌沒有顯示任何錯誤,如果我將輸出重定向到文件,它會創建文件,但沒有執行 php 腳本,即使是通過 shell 腳本來執行。我嘗試在 crontab 中不設置 SHELL 和 PATH,但也不起作用。
問題是用於連接 IBM Infomix 數據庫的 SDK 變數。儘管我已經設置了 PATH,但還是需要從 IBM Informix 中導出我在安裝 Informix SDK 時定義的環境變數。奇怪的是,即使使用 PDO 異常,當我使用 &> 重定向錯誤標準輸出時也沒有生成任何錯誤。
可能存在一種最優雅的方式來做到這一點,但我不能在現場環境中玩耍。遵循目前有效的 cron 作業:
SHELL=/usr/local/bin PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/IBM/informix/bin 14,29,44,59 * * * * root export INFORMIXSERVER=<data_source_name> && export INFORMIXDIR=<path_to_informix_sdk> && export INFORMIXTMP=<path_infomix_tmp> && export INFORMIXSQLHOSTS=<path_to_sqlhost_file> && export $PATH:$INFORMIXDIR/bin && /usr/bin/php /opt/project/script.php &> /var/log/project/task.log