我有一个php脚本,发送电子邮件报告与附件的pdf文档。我用fopen。如果我手动调用php文件,它的工作没有任何问题,邮件将按预期发送。
但:如果同一个文件应该被cron作业调用,那么它根本不起作用。错误是:警告:fopen(filename.pdf):打开流失败:第29行/home/public_html/util.php中没有这样的文件或目录
有什么办法解决这个问题吗?
每个cron都在最小环境中运行,最小环境可以是不同的shell和不同的配置文件,而不是您的用户帐户。此外,脚本不是从包含目录本身启动的。
在大多数情况下,如果您像在命令行shell中执行脚本那样将目录更改为包含脚本的目录,则它可以工作。而不是
* * * * * /usr/bin/php /path/to/your/file.php
写这个:
* * * * * cd /path/to/your/ && /usr/bin/php ./file.php
如果这还不够,您可以通过写入
来加载默认用户shell和PATH
变量。SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
在crontab的顶部(当然要有正确的设置,可能是/bin/bash
和echo $PATH
的输出)。
Cron作业运行时没有任何环境,包括当前目录。这意味着您需要使用完整的路径来处理任何想要处理的文件。
如果您在crontab的顶部添加了一个有效的电子邮件地址:
MAILTO=your-email@example.com
您将获得cron作业发送到您的电子邮件的任何输出。这包括错误消息,这对调试很有用。