【发布时间】:2020-02-28 23:19:45
【问题描述】:
我有一个查询 MySQL 和 IBM Informix 数据库(位于其他主机)的 php 脚本,生成 json 文件,处理信息并将其插入 MySQL 数据库。
该脚本有一个主文件和另一个具有查询处理功能的文件。保持这样的状态:
/opt/project
script.php
functions.php
script.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 日志没有显示任何错误,如果我将输出重定向到文件,它会创建文件,但没有运行 php 脚本,即使是通过 shell 脚本来执行此操作。我尝试在 crontab 中不设置 SHELL 和 PATH,但也不起作用。
【问题讨论】:
-
将
error_reporting设置为E_ALL。还要删除这个which php,而是调用/usr/bin/env php script -
@MarcinOrlowski 我做了测试但没有工作。脚本没有错误。即使设置shebang并使用绝对路径调用'./opt/project/script.php',也会调用cron jog但未执行脚本。