PHP_crontab 漏洞,php对crontab的操作

php_crontab

基于pcntl和react/event-loop的定时任务管理器

为什么使用php_crontab?

当我们有少量的定时任务需要管理时,unix的crontab服务时足够的。如果我们有非常多的定时任务 需要管理时,机会有一些问题,例如:

crontab服务通过一个文本文件管理定时任务,如果没有注释,对新人来说去理解他们是比较难的。

如果定时任务分散在许多机器上,管理他们也是比较难的。

如果你想收集他们的日志,同样不会简单。

不同用户的定时任务分散在不同的文件中。 基于以上几点原因,我们需要一个可以统一管理配置的定时任务管理器。

如何使用php_crontab?

有两种方式使用php_crontab管理你的定时任务。 你可以写一个脚本,然后把它加入到crontab服务器中,每分钟执行一次。例如tests/simple。 或者你可以写一个守护进程脚本,它会像一个服务一样一只运行,直到你杀死它。 它将每分钟检查一次定时任务。例如tests/daemon.php

特性

定时任务管理可以被存储在任何地方。例如:mysql、redis等。

定时任务的日志可以根据你的需要进行配置

多个用户的定时任务可以统一管理

多进程,每个任务一个进程

你可以为每个任务设置用户和用户组

标准输出可以进行重定向

基于react/event-loop,它可以作为一个守护进程运行

一个HTTP服务器,你可以通过它管理定时任务

HTTP 接口

HTTP 方法: GET

add 增加任务

get_by_name 根据任务名称获取任务

remove_by_name 根据任务名称删除任务

clear 删除所有任务

get 获取所有任务

start 开始检测定时任务

stop 停止检测定时任务

示例:

http://host:port/add?name=name&cmd=cmd&time=time&out=out&user=user&group=group&comment=comment

http://host:port/get_by_name?name=name

http://host:port/remove_by_name?name=name

http://host:port/clear

http://host:port/get

http://host:port/start

http://host:port/stop

基于crontab服务运行

* * * * * php demo.php

<?php $missions = [    [        'name' => 'ls',        'cmd' => "ls -al",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',        'user' => 'www',        'group' => 'www'    ],    [        'name' => 'hostname',        'cmd' => "hostname",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',    ],];$tasks = array();foreach($missions as $mission){    $tasks[] = new \Jenner\Crontab\Mission($mission['name'], $mission['cmd'], $mission['time'], $mission['out']);}$crontab_server = new \Jenner\Crontab\Crontab(null, $tasks);$crontab_server->start(time());

作为一个守护进程运行

it will check the task configs every minute.

$missions = [    [        'name' => 'ls',        'cmd' => "ls -al",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',        'user' => 'www',        'group' => 'www'    ],    [        'name' => 'hostname',        'cmd' => "hostname",        'out' => '/tmp/php_crontab.log',        'time' =>  '* * * * *',    ],];$daemon = new \Jenner\Crontab\Daemon($missions);$daemon->start();

作为守护进程运行同时启动一个http server

$missions = [    [        'name' => 'ls',        'cmd' => "ls -al",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',    ],    [        'name' => 'hostname',        'cmd' => "hostname",        'out' => '/tmp/php_crontab.log',        'time' => '* * * * *',    ],];$http_daemon = new \Jenner\Crontab\HttpDaemon($missions, "php_crontab.log");$http_daemon->start($port = 6364);

Then you can manage the crontab task by curl like:

curl http://127.0.0.1:6364/get_by_name?name=ls

curl http://127.0.0.1:6364/remove_by_name?name=hostname

curl http://127.0.0.1:6364/get

启动脚本

[root@jenner php_crontab]# ./bin/php_crontab php_crontab help:

-c  --config    crontab tasks config file

-p  --port      http server port

-f  --pid-file  daemon pid file

-l  --log       crontab log file

[root@jenner php_crontab]#nohup ./bin/php_crontab -c xxoo.php -p 8080 -f /var/php_crontab.pid -l /var/logs/php_crontab.log

https://github.com/huyanping/php_crontab/blob/master/README.zh.md

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值