0

我有一个 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 创建它时却没有。

4

2 回答 2

0

PHP shell 脚本,例如 cli/cron 作业,仍然需要<?php标签。例如

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

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

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

于 2013-05-29T15:26:02.433 回答
0

最终解决了这个问题......我确定我上面使用的 php 代码有什么问题,但它似乎以某种方式导致执行失败。

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

exec('echo -e "`crontab -l`\n10 * * * * php -q /home1/user1/public_html/mail.php" | crontab -');
于 2013-05-29T16:02:12.110 回答