gpt4 book ai didi

php - Cronjob 创建输出文件,但不写入它

转载 作者:行者123 更新时间:2023-12-05 05:17:40 25 4
gpt4 key购买 nike

我的 crontab 文件中有这两行:

0 * * * * /usr/bin/php /var/www/html/worker/confirmBets.php >> /var/www/html/worker/out.put
30 23 * * * mv /var/www/html/worker/out.put /var/www/html/worker/out.put-"$(date +"\%y-\%m-\%d")" >/dev/null 2>&1

虽然第二行工作并每晚重命名 out.put 文件,但第一行不太工作。它创建 out.put 文件,但不会向其中写入任何内容。我知道 PHP 脚本可以正常工作,因为当我运行命令时(正是那一行,只是没有 0 * * * *),它完美地写入了 out.put 文件。但是,当它从 cronjob 启动时,它不会写入它(即使它创建了它)。

有趣的事实:几周前它确实有效,我只是注意到它不知何故不再有效了。不幸的是,我不知道我是否在此期间更改了服务器设置中的任何内容。是什么导致了这个问题?

系统日志显示以下输出:

Feb 25 07:00:01 vps485163 CRON[15161]: (root) CMD (root /usr/bin/php /var/www/html/worker/confirmBets.php >> /var/www/html/worker/out.put)
Feb 25 07:00:01 vps485163 CRON[15160]: (CRON) info (No MTA installed, discarding output)

这是什么意思?

最佳答案

找到解决方案。我刚刚发现您也可以在 crontab 中直接重定向来自 stderr 的输出。我像这样编辑了我的第一行:

Feb 25 07:00:01 vps485163 CRON[15161]: (root) CMD (root /usr/bin/php /var/www/html/worker/confirmBets.php >> /var/www/html/worker/out.put) 2>&1

注意末尾的 2>&1 输出 stderr (2) 当前 stdout 所在的位置 (>>/var/www/html/worker/out.put).通过这个,我可以在我的输出文件中成功记录 PHP 错误。我弄乱了 require() 中的文件路径。就这么简单。

尽管这只是一个猜测,但我认为这也是我系统日志中错误的来源:crontab 文件中指定了未重定向的输出通过电子邮件发送给 cronjob 所有者。由于 stderr 上有未重定向的输出,即使我没有安装邮件传输代理,它也会尝试通过邮件将其发送给我。

关于php - Cronjob 创建输出文件,但不写入它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48975921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com