使用Crontab运行php脚本

时间:2013-05-29 15:22:44

标签: php cron crontab

我有一个PHP脚本,只是通过电子邮件给我发送测试消息。如果我进入我的网络服务器cPanel,我可以创建一个每10分钟运行一次脚本的cronjob,它可以很好地工作。

我使用以下设置在cPanel中手动安排cron作业:

10 * * * * php -q /home1/user1/public_html/mail.php

再次上面的工作正常,但是当我尝试通过PHP而不是cPanel创建cron作业时,它永远不会运行。当我检查cPanel以查看作业是否实际上是由我的php脚本创建时,它会显示出来。显示在cPanel中的所有设置都是正确的,它只是不运行脚本。

这是我用来创建cron作业的PHP代码:

$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'10 * * * * php -q /home1/user1/public_html/mail.php'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');

我想这可能是一个许可问题或类似的东西?当我创建它时,不确定为什么这个工作有效,但是当PHP创建它时却没有。

2 个答案:

答案 0 :(得分:0)

PHP shell脚本,例如cli / cron作业,STILL需要<?php标记。 e.g。

#!/usr/bin/php
<?php
$output = blah blah blah

请记住,没有“PHP脚本”这样的东西。只有文件中包含PHP代码块。如果文件中没有打开<?php标记块SOMEWHERE,那么PHP执行引擎将永远不会启动,即使该文件已由PHP处理/解析。

如果没有<?php,文件的内容将被简单地视为纯文本输出。

答案 1 :(得分:0)

结束搞清楚......我确定我上面使用的php代码有什么问题,但似乎是某种程度上导致执行失败。

我现在正在使用下面的代码和作业计划并实际运行:)

exec('echo -e "`crontab -l`\n10 * * * * php -q /home1/user1/public_html/mail.php" | crontab -');