繁体   English   中英

手动调用时,php脚本可以完全正常运行,但不会从cron作业中运行

[英]php script works fully when called manually, but won't run from cron job

我有一个PHP脚本,该脚本实际上复制了一个zip文件,将其解压缩,然后将生成的文本文件复制到MySQL数据库。

当我手动调用php页面时,这种方法非常有效,但是每天都需要这样做,因此我想将其设置为cron作业。

我有一个可以执行的cron作业,并且已经通过调用一个非常简单的脚本进行了验证,但是在尝试运行我的整个页面时它失败了。

我已经将其追溯到两个代码区域。 首先:

date_default_timezone_set('Europe/London');

我了解可以通过htaccess或php.ini文件进行设置,因此我对此并不在意。

但是,第二个阻止cron作业运行的代码区域是:

$localzipfile = "myfolder/myzipfile.zip";
$localzipfilefullpath = "/homepages/20/dXXXXXXXXX/htdocs/sub/folder/" . $localzipfile . "";
$localpath = pathinfo(realpath($localzipfile), PATHINFO_DIRNAME);
$zip = new ZipArchive;
$res = $zip->open($localzipfilefullpath);
if ($res === TRUE) {
$zip->extractTo($localpath);
$zip->close();
}

同样,当我手动运行代码时,所有这些都可以完美地工作,因此我知道一切就绪并可以正常工作。 所有路径均正确,并且zip文件按预期解压缩。

只有当我尝试将其作为cron作业运行时,它才会失败并且不会解压缩文件。

我还看到了一些其他有关php文件的问题,这些问题是手动运行的,但不能作为cron作业运行,但是没有一个问题与本地zip文件的解压缩有关。

更新:

我已经设法记录了cronjob的错误输出,并且正在报告以下内容:

“无法实例化不存在的类:ziparchive”

我不明白这一点,因为当我从浏览器运行代码时,所有代码都能正常运行吗?

您是否使用$ localzipfile和$ localpath的相对路径?

如果是的话,请在运行PHP之前尝试使用绝对值脚本或将chdirs写入Shell脚本的shell脚本。

文件的路径必须是绝对路径,例如:

$localzipfile = "/home/myfolder/myzipfile.zip";
$localzipfilefullpath = "/var/www/html/homepages/20/dXXXXXXXXX/htdocs/sub/folder/" . $localzipfile;

您确定运行cron的用户有权访问两个目录吗? Cron可能在无法访问您的/ myfolder或/ html目录的其他用户下运行,因此请确保为用户提供适当的权限。 你可以看到这两个答案, 正确答案为 | Answer2我回想了一下如何设置权限。

经过大量的测试和调查,终于设法找到了答案!

感谢所有提出建议的人,但是当我通过浏览器运行脚本时,它似乎在PHP 5.4版上运行,但是当cron作业运行时,它在4.9版上运行了!

将我的cronjob调用脚本从以下位置更改:

0 * * * * /usr/bin/php

0 * * * * /usr/bin/php5

解决了zip问题,cronjob现在可以正确解压缩我的文件了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM