如何设置php脚本在crontab中运行?

时间:2014-02-27 23:03:30

标签: php crontab

我试图让一个PHP脚本在crontab中运行,但是当在crontab中运行时,我从php得到一个包含错误。

crontab条目类似于:

* * * * * php /path/sendEmail.php > /path/logs/sendEmail/sendEmail-`date +\%Y-\%m-\%H\ \%k:\%M:\%S`.log 2>&1 &

这会创建日志文件但是在日志文件中我会收到一些php错误:

PHP Warning:  include_once(../../../lib/Database.php): failed to open stream: No such file or directory in /path/sendEmail.php on line 6

Warning: include_once(../../../lib/Database.php): failed to open stream: No such file or directory in /path/sendEmail.php on line 6
PHP Warning:  include_once(): Failed opening '../../../lib/Database.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /path/sendEmail.php on line 6

Warning: include_once(): Failed opening '../../../lib/Database.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /path/sendEmail.php on line 6
PHP Fatal error:  Class 'Database' not found in /path/sendEmail.php on line 9

Fatal error: Class 'Database' not found in /path/sendEmail.php on line 9

当我在crontab条目中运行该命令时,我在日志文件中得到相同的错误。现在,当我在终端中运行php sendEmail.php时,它工作得很好。电子邮件发出一切。在之前的情况下,我收到了错误(电子邮件也没有发送出去)。

不确定输出管道如何改变php脚本的运行方式。关于如何让php脚本作为cronjob运行的任何想法?

1 个答案:

答案 0 :(得分:1)

当cron启动脚本时,其工作目录不太可能与PHP脚本所在的目录相同,因此../../../lib/Database.php之类的相对路径是不可取的,至少在当前形式下是这样。

在脚本的顶部添加:

define('__SCRIPT_ROOT', dirname(__FILE__));

将您的包含更改为:

include_once(__SCRIPT_ROOT . '/../../../lib/Database.php');

现在__SCRIPT_ROOT包含脚本的绝对路径,您可以将其用作执行相对路径的基础。