PHP脚本未通过cron作业运行

问题描述 投票:1回答:2

我有一个php脚本,用于查询MySQL和IBM Informix数据库(位于其他主机中,生成json文件,处理信息并将其插入MySQL数据库。

该脚本具有一个主文件,另一个具有查询处理功能。保持这样:

/opt/project
     script.php
     functions.php

script.php需要functions.php文件,根据对数据库的查询生成正在执行的json,并插入处理的数据。

我可以使用绝对或相对路径平稳地运行脚本。

在/ opt /项目内部:

# php script.php

其他地方:

 # /usr/bin/php /opt/project/scrpt.php

但是,当它由cron作业执行时不起作用。我确实已经设置了通知环境变量,执行日志测试,甚至创建了一个外壳脚本来运行script.php,而cron运行该外壳脚本。

服务器路径(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,但也无法正常工作。

php cron cron-task
2个回答
1
投票

请尝试:

* * * * * /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启动的)


0
投票

问题是与IBM Infomix数据库连接的SDK变量。尽管已经设置了PATH,但是有必要从我在安装Informix SDK时定义的IBM Informix导出环境变量。奇怪的是,即使使用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
© www.soinside.com 2019 - 2024. All rights reserved.