您的位置 首页 php

PHP+shell+crontab实现任务调度功能的思路

前言:

在php开发过程中,我们需要定时执行某些任务(定时进程),或者一直执行某些任务(常驻进程)。我们如何在web端对这些任务进行管理和监控呢?也就是说如何实现任务调度功能。任务调度,java、python等都有一些成熟的方案。但是我们如何使用PHP实现任务调度呢?我们这里一起来讨论一下实现方案的思路,抛砖引玉一下,希望高手们也赐教一下你们的实现方案。

内容概要:

1、任务调度的大体思路

2、任务调度的详细方案

3、多台服务器任务调度的改进方案

一、任务调度的大体分析

我们先假设一个单台服务器的需求。有两个任务:

对于PHP来说,实现一个常驻进程,我们可以使用死循环实现,并且使用cli命令执行的方式启动。而定时任务我们可以借助 crontab 来进行管理,当然执行方式也是用cli命令执行方式。

这里插一句,使用linux中的curl一个网址的方式不如直接使用cli方式好,因为不用再走一次 web服务器 nginx apache ),节省一些资源。

使用web的方式对任务进行管理,我们可以借助 shell ,加上crontab定时执行的方式来实现,即,在web管理端,将要执行的任务写到一个文件A中,运行一个常驻任务,发现A文件存在,就执行A所要求的任务,并将A文件改名后存储到其他地方。这样就能实现对任务的调度功能。

二、任务调度的详细方案

首先,我们在web中,对假设的两个任务先存储起来,我们存储的字段有:执行时间设置,任务标志,任务的shell文件(注意:shell文件可以在页面操作中生成,并赋予执行权限,并在这个shell文件中,我们可以控制常驻进程的个数)。并在页面设置一个更新任务的按钮,当用户点击这个按钮时,我们将两个任务写成crontab命令的方式存储到一个文件中,假设该文件叫cron.txt。

第二步,我们创建一个shell文件,并将该文件加入到crontab,可以设置每一分钟执行一次。假设文件名字叫做watch.sh,该文件的作用是,发现有cron.txt文件存在,就将cron.txt文件的内容写入到crontab中,并将cron.txt文件改名存储到其他地方。

以上两步实现了对任务的启动,常驻任务和定时任务都可以使用这种方式。

下面我们实现常驻任务的关闭和重启功能。

web页面发出常驻任务的停止命令,我们将该命令放到一个文件中,假设是stop.txt,在watch.sh中检查stop.txt文件是否存在,如果存在,关闭stop.txt文件中所要求的进程。

三、多台服务器任务调度的改进方案

以上是单台服务器的实现方案,对于多台服务器,我们可以将watch.sh部署到每一台服务器上,并将任务加载到crontab中,我们可以生成多个cron.txt文件的命名加上服务器的表示,比如server1_cron.txt,在具体每台服务器的watch.sh中进行识别,将属于本台服务器的cron.txt任务加载到crontab中。

同理,我们对于关闭任务的stop.txt文件也做同样的处理。

如此一来,我们可以在web页面中控制每个任务具体到那一台服务器上执行,或者指定到多台服务器上执行。

当然,我们还可以在watch.sh中加上进程资源占用数据的获取,并按照一定规则存储到某个文件中,web端按照规则读取文件内容,完成进程的监控功能。

以上方案均用到了文件的存储,所以,多台服务器需要用到分布式文件存储的服务。当然,我们也可以使用 redis 或者mysql等存储文件的内容。

这里只是一个思路,代码实现后我会发到 github 上。


关注、评论、点赞,转发,收藏,任选一种或多种,是您最大的支持和鼓励。

原创很辛苦,码字不容易,转载请注明出处:头条号|PHP在路上

文章来源:智云一二三科技

文章标题:PHP+shell+crontab实现任务调度功能的思路

文章地址:https://www.zhihuclub.com/153162.shtml

关于作者: 智云科技

热门文章

网站地图