如果我crontab -l在命令行中键入,则可以看到以下行:
crontab -l
# * * * * * /usr/bin/php /home/user/every_minute_script.php
要 启动 此cronjob,我需要使用crontab -e命令编辑文件,删除该行开头的注释字符,保存已编辑的文件,然后退出编辑器。
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
/home/user
chmod a+x cron.php
用法:./cron.php activate启用cronjob并将./cron.php deactivate其禁用。
./cron.php activate
./cron.php deactivate
该脚本正确地(本身)设置了EDITOR环境变量,然后调用crontab -e,依次调用EDITOR(现在是相同的cron.php脚本),并将临时crontab文件位置作为参数传递。然后,找到并更改了正确的crontab行,并保存了修改后的版本,替换了临时文件。脚本退出后,crontab将更新。
这恰好满足了我的需求,并且符合我的需求。
其他答案很好,可能适合不同的需求和方案,在此我要感谢做出贡献的每个人。