[PHP脚本通过CRON作业运行时死亡

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

首先让我说我完全不是PHP程序员-这是我自己解决的问题。

我有一个单独位于文件中的函数,基本上看起来像这样:

<?php
function UploadFile($source, $destination){
   $debugLogPath = '/biglongpath/debug.log';
   file_put_contents($debugLogPath,PHP_EOL . "Beginning UploadFile function", FILE_APPEND);

    set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
    require_once('Net/SFTP.php');

    ...Rest of the ftp code here...
}

?>

它正在使用phpseclib。如果我通过网络浏览器运行主要的PHP脚本(调用此函数...),则一切正常。当我通过CRON作业运行相同的脚本时,调用此函数后它将立即死亡。我已经通过在调用函数之前写出调试日志来验证了这一点-函数写入日志之前的第一条语句,但是从未写入“ Beginning UploadFile function”。

我猜测可能与require_once语句有关-通过CRON执行时可能是路径问题或权限问题?

我已经尝试将整个函数的内容包装在try / catch中,并写出Exception,但是它仍然死了。

php phpseclib
1个回答
0
投票

我想知道为什么在问题陈述时有3个有用的标志表示文件正在写入?但是,这不是CLI错误日志,因此不会自动在该日志中记录任何错误。第二个建议提出的可能性更大,而可能性更大:

确保已为PHP-CLI加载了这些模块:

[libsodiumopensslmcryptgmpcomposer.json提示)。

正在运行php --ini应显示加载了哪些INI文件。即使存在相应的INI文件,也请确保其中的说明未被;注释掉。

建议使用运行cronjob的用户的身份从CLI手动运行CLI,并启用错误报告。如果这样做没有帮助,请使用xdebug单步进入,以查看错误的确切位置(NetBeans,Eclipse,VS Code和其他一些IDE确实支持PHP调试)。这需要一些努力来进行设置,但是随后它提供了一种更好的调试方法。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.