簡體   English   中英

PHP 腳本未通過 cron 作業運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM