如何使用 PHP 检查 cronjob 是否存在?

发布于 2024-10-16 01:56:07 字数 69 浏览 4 评论 0原文

有没有办法知道 php 中是否已经存在 cronjob?

我希望它能够在大多数主机上运行,​​甚至是共享的。

Is there a way to know if a cronjob already exists with php?

I want it to work on most hostings, even shared.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

长发绾君心 2024-10-23 01:56:07

,PHP 中没有这样的直接权限。

但是(在专用服务器上)您可以编写一个 PHP 脚本来读取 /etc/crontab 文件并解析信息以检查服务器上是否存在特定的 cron。

NO, There's no such direct privilege in PHP.

But (On Dedicated Server) you can write a PHP script to read /etc/crontab file and parse the info to check if a specific cron exists on the server.

睫毛上残留的泪 2024-10-23 01:56:07

您可以尝试运行 crontab -l 命令,该命令应该可以在 PHP 中运行。您可能必须限定完整路径,例如 /usr/bin/crontab -l,这取决于主机。

这将为运行该命令的用户返回 crontab 条目,如果 PHP 页面和 cron 作业以同一用户运行(现在许多共享主机使用 setuid php 脚本),这就是您想要的。要获取其他用户的 crontab 条目,您需要大多数系统上的超级用户权限,以及 crontab -l -u otheruser

You could try running the crontab -l command, which should work from PHP. You might have to qualify the full path, e.g., /usr/bin/crontab -l, which would depend on the host.

This will return the crontab entries for the user who runs the command, which is what you want if the PHP page and cron jobs run as the same user (many shared hosts use setuid php scripts these days). To get the crontab entries for another user you'd need superuser rights on most systems, and crontab -l -u otheruser.

感情洁癖 2024-10-23 01:56:07

使用 shell_exec()system() 或类似的东西可能解决问题。
但它在 safe_mode 打开时不起作用。

我认为共享主机不会启用这些功能。

@Nathan:/usr/bin/crontab -l 不会为运行脚本的用户返回 crontab 吗?例如 www-data、wwwrun、apache 等等?

using shell_exec() or system() or something like that might solve the problem.
But it won't work with safe_mode turned on.

and i think shared hostings won't have these features enabled.

@Nathan: wouldn't /usr/bin/crontab -l be returning the crontab for the user who runs the script? e.g. www-data, wwwrun, apache or something?

电影里的梦 2024-10-23 01:56:07

除了 Nathan 的回答之外:

如果您可以运行 exec()crontab 命令

function cronjob_exists($command){

    $cronjob_exists=false;

    exec('crontab -l', $crontab);

    if(isset($crontab)&&is_array($crontab)){

        $crontab = array_flip($crontab);

        if(isset($crontab[$command])){

            $cronjob_exists=true;

        }

    }

    return $cronjob_exists;
}

$command = '30 9 * * * '.__DIR__.'/cronjobs/job1.php';

if(cronjob_exists($command)===FALSE){

    //add job to crontab
    exec('echo -e "`crontab -l`\n'.$command.'" | crontab -');

}

In addition to Nathan's answer:

If you can run exec() and the crontab command

function cronjob_exists($command){

    $cronjob_exists=false;

    exec('crontab -l', $crontab);

    if(isset($crontab)&&is_array($crontab)){

        $crontab = array_flip($crontab);

        if(isset($crontab[$command])){

            $cronjob_exists=true;

        }

    }

    return $cronjob_exists;
}

$command = '30 9 * * * '.__DIR__.'/cronjobs/job1.php';

if(cronjob_exists($command)===FALSE){

    //add job to crontab
    exec('echo -e "`crontab -l`\n'.$command.'" | crontab -');

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文