[英]PHP Script is not running via cron job
I have a php script that queries a MySQL and IBM Informix database (located in other host), generates json files, handles the information and inserts it into the MySQL database.
該腳本有一個主文件和另一個具有查詢處理功能的文件。 保持這樣:
/opt/project
script.php
functions.php
腳本.php需要functions.php文件,根據對數據庫的查詢生成正在執行的json,並插入處理的數據。
我可以使用絕對或相對路徑順利運行腳本。
/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
* * * * * /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
* * * * * 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
* * * * * 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
* * * * * cd /opt/project && sh run_script.sh
其中shell腳本有以下內容:
#!/usr/bin/env bash
cd /opt/project
PHP=`which php`
$PHP script.php
cron 日志沒有顯示任何錯誤,如果我將 output 重定向到一個文件,它會創建該文件,但沒有運行 php 腳本,即使是通過 Z2591C98B70119FE624898B1E4ZB 腳本執行該腳本。 我嘗試在 crontab 中未設置 SHELL 和 PATH ,但也不起作用。
請試試:
* * * * * /full/path/to/your/run_script.sh
反而:
* * * * * cd /opt/project && sh run_script.sh
如果您希望執行 bash 或 sh 腳本,則腳本的路徑應為上述絕對路徑,或者:
./run_script.sh
注意./
。 否則腳本將不會被執行。
還可以通過以下方式使您的 bash 腳本可執行:
chmod +x run_script.sh
您也可以直接運行腳本,而無需來自 cron 的run_script.sh
:
* * * * * /absolute/path/to/php -f "/absolute/path/to/script.php"
要將當前目錄更改為 php 腳本所在的目錄,您可以在 php 腳本的開頭使用它:
chdir(dirname(__FILE__));
因為當您通過 cron 運行 php 腳本時,php 的當前目錄不是腳本而是不同的(因為它是由 cron 啟動的)
問題是 SDK 的變量與 IBM Infomix 數據庫連接。 盡管我已經設置了 PATH,但必須從 IBM Informix 中導出我在安裝 Informix SDK 時定義的環境變量。 奇怪的是,即使使用 PDO 異常,當我使用 &> 重定向錯誤標准 output 時也沒有產生任何錯誤。
可能存在一種最優雅的方式來做到這一點,但我不能在現場環境中玩耍。 遵循當前有效的 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.