当前位置: 首页 > 面试题库 >

如何使用PHP启动/停止cronjob?

沈弘盛
2023-03-14
问题内容

如果我crontab -l在命令行中键入,则可以看到以下行:

# * * * * * /usr/bin/php /home/user/every_minute_script.php

启动 此cronjob,我需要使用crontab -e命令编辑文件,删除该行开头的注释字符,保存已编辑的文件,然后退出编辑器。

停止 此cronjob,请执行相同的步骤,但在该行的开头添加注释字符。

我想使用 PHP脚本 实现完全相同的效果,而不是手动编辑文件。


问题答案:

我进行了一些研究,并在论坛中找到以下消息:

将EDITOR环境变量设置为php脚本,调用“ crontab -e”。该脚本可以修改文件,并且在退出时crontab将重新读取文件并进行更新。

因此,我尝试了一些方法,并成功了。我将在下面粘贴工作代码:

#!/usr/bin/php
<?php

$on  = "* * * * * /usr/bin/php /home/user/every_minute_script.php\n";
$off = "# * * * * * /usr/bin/php /home/user/every_minute_script.php\n";

$param    = isset( $argv[1] ) ? $argv[1] : '';
$filename = isset( $argv[2] ) ? $argv[2] : '';

if ( $param == 'activate' )
{
    shell_exec( 'export EDITOR="/home/user/cron.php on"; crontab -e' );
}
elseif( $param == 'deactivate' )
{
    shell_exec( 'export EDITOR="/home/user/cron.php off"; crontab -e' );
}
elseif( in_array( $param, array( 'on', 'off' ) ) )
{
    if ( !is_writable( $filename ) )
        exit();

    $crontab = file( $filename );
    $key = array_search( $param == 'on' ? $off : $on, $crontab );

    if ( $key === false )
        exit();

    $crontab[$key] = $param == 'on' ? $on : $off;
    sleep( 1 );
    file_put_contents( $filename, implode( '', $crontab ) );
}

exit();

?>

实际上,我们cron.php/home/user文件夹中有一个名为的脚本,设置为可执行文件(chmod a+x cron.php),并从命令行(PHP-CLI)调用。稍后,我将对其进行调整以从网络运行,这是我的意图。

用法:./cron.php activate启用cronjob并将./cron.php deactivate其禁用。

该脚本正确地(本身)设置了EDITOR环境变量,然后调用crontab -e,依次调用EDITOR(现在是相同的cron.php脚本),并将临时crontab文件位置作为参数传递。然后,找到并更改了正确的crontab行,并保存了修改后的版本,替换了临时文件。脚本退出后,crontab将更新。

这恰好满足了我的需求,并且符合我的需求。

其他答案很好,可能适合不同的需求和方案,在此我要感谢做出贡献的每个人。



 类似资料:
  • 问题内容: 我正在使用我的应用程序拨打电话。 一段时间后有什么办法可以终止通话?还是在ACTION_CALL开始之前设置一个计时器? 我正在使用Prasanta博客中的以下代码,但由于某些原因,导致出现以下错误。有什么建议? 无法解决 问题答案: 您的问题已被问过很多次了。简短的答案是,没有官方的方法可以做到这一点。 在一个问题中,有人建议打开飞行模式(应用程序当然需要权限才能执行此操作)。这很粗

  • 我无法停止。它的样式是。如何启动和停止圆形的小型?

  • 问题内容: 我需要一些有关在PHP中启动和停止计时器的信息。我需要测量从我的.exe程序开始(我在PHP脚本中使用函数)到完成执行并显示所花费的时间(以秒为单位)之后经过的时间。 我怎样才能做到这一点? 问题答案: 您可以使用并计算差异: 这是PHP的文档:http : //php.net/manual/zh/function.microtime.php

  • 对不起,老问题。我已经澄清了。我如何用我可怜的线程类开始停止线程? 编辑:它在循环中,我想在代码开头再次重新启动它。我如何启动停止重新启动? 我的班级: 在主代码中,我希望:

  • 参考 workerman手册 http://doc3.workerman.net/install/start-and-stop.html

  • 注意Workerman启动停止等命令都是在命令行中完成的。 要启动Workerman,首先需要有一个启动入口文件,里面定义了服务监听的端口及协议。可以参考入门指引--简单开发实例部分 这里以workerman-chat为例,它的启动入口为start.php。 启动 以debug(调试)方式启动 php start.php start 以daemon(守护进程)方式启动 php start.php