【问题标题】:Using Crontab to run a php script使用 Crontab 运行 php 脚本
【发布时间】:2013-05-29 15:22:43
【问题描述】:

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

【问题讨论】:

  • 我会说运行 PHP 的用户不允许您的服务器管理员创建 cron 任务。在共享环境中,这将是一个巨大的安全漏洞。
  • 可能是这样,但 PHP 创建的 cron 作业确实显示在 cPanel 中:/
  • 我想我下次评论之前应该更仔细地阅读这个问题。
  • 我不会尝试用 php 修改 crontab。每 10 分钟调用一次 cron.php 怎么样,在 cron.php 中你可以做你自己的 crons,由自制的文本文件或基于数据库的 cron-manager 定义
  • 我对您所描述的内容不太熟悉。你有例子吗?

标签: php cron crontab


【解决方案1】:

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

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

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

没有&lt;?php,文件的内容将被简单地视为纯文本输出。

【讨论】:

  • 是的,我所有的 PHP 文件都有
  • 再次,作业确实安排并显示在 cPanel 中它只是不运行 mail.php
  • @user1647347 你不需要结束 ?> 标记,除非你要输出不被呈现为 PHP btw 的东西。
  • @user1647347:如果代码部分完成后没有要执行的非代码输出,则不需要关闭?&gt;
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2017-08-31
    • 2021-09-10
    • 2021-06-12
    相关资源
    最近更新 更多