首页 > 编程知识 正文

如何看开起了多少个crontab(安卓定时任务cron)

时间:2023-05-05 22:29:48 阅读:105237 作者:4892

之前介绍了如何通过编辑crontab文件、创建和删除cron任务来掌握crontab服务并实现tomcat状态监控。在任务不多的情况下,这种编辑方式相对方便。任务太多的时候,还是不方便管理。有可能不小心修改了错误的表达式行,这将导致任务失败或服务宕机。如果cron任务可以通过网页来管理,这种错误的可能性就会降低。

Crontab-UI的应用

在日常开发中,总会有固定的任务。在Spring系统中,我们会想到Quartz、Spring Schedule以及一些分布式任务xxl-job等。然而,在Unix/Linux系统中,首先想到的解决方案可能是cron计划任务,它可以帮助我们在类似Unix的系统中有计划地创建周期性命令或任务,并有计划地执行这些周期性任务。许多服务器端开发和运维工程师确实广泛使用cron计划任务来解决计划任务部分的问题。Cron定时任务也比较简单,应用也不是特别难。但是,对于不熟悉的开发人员,当我们创建大量定时任务时,我们必须修改crontab文件来创建新任务和更新旧任务,这将不可避免地导致错误。如果某些任务由于修改而出错,可能会导致生产系统出现一些问题。同时,如果cron任务由于crontab的错误定义而被关闭,将会给我们的工作带来很大的好处。为了避免上述问题,可以使用crontab-UI(crontab任务的图形化管理系统),它提供了一个Web管理界面。我们可以用这个工具轻松管理cron任务,任务创建后,我们可以对其进行一次测试,这极大地方便了cron任务的应用。

Ntab-UI是基于NodeJS开发的,在GitHub中是开源的。使用crontab-ui主要是指在创建、删除、启动和停止crontab任务时,不再需要手动编辑crontab文件,以上主要任务cron只需操作管理工具即可完成。同时,crontab-ui还提供了备份cron任务、导入和导出工具以及错误日志支持。使用这个工具将大大减少我们的工作量。

Ntab-UI支持npm部署和docker部署,两者的安装过程都比较简单。安装和使用过程介绍如下。

docker部署

#拉镜

docker pull alseambusher/crontab-ui

#最小启动

docker run-d-p 8000:8000 alseambusher/crontab-ui

#指定用户名和密码。

docker run-e BASIC _ AUTH _ USER=admin-e BASIC _ AUTH _ PWD=123456-d-p 8000:8000 alseambusher/crontab-ui

#指定数据存储和日志输出位置。

mkdir-p/数据/crontabs/日志

docker run - mount type=sddyd,source=' $(pwd)'/crontab/,target=/crontab-ui/crontab/-d-p 8000:8000 alseambusher/crontab-ui

#账号和存储位置名称

#/数据/上面创建的crontabs

docker run - mount type=sddyd,source=/data/crontab/,target=/crontab-ui/crontab/-v/data :/data : rw-e BASIC _ AUTH _ USER=admin-e BASIC _ AUTH _ PWD=123456 TZ=亚洲/上海-d-p 8000:8000 alseambusher/crontab-ui

使用docker启动crontab-ui时,cron是使用镜像创建的,因此需要挂载目录,这样镜像就可以使用主机的脚本和其他资源。同时也要注意,因为cron服务在镜像中,所以时间等信息也是使用的镜像服务,需要设置时间参数。通过镜像部署服务时,所有创建的cron都将在镜像中创建,主机不会创建cron服务。

00-1010 crontab-ui是NodeJS开发的,所以安装之前需要安装npm。npm安装好之后,Crontab-UI的安装就非常简单了。

#安装Crontab-用户界面

npm安装-g crontab-ui

#安装完成后,启动也比较简单,最简单的启动方式。

crontab-ui

#指定用户名密码和端口号启动。

HOST=0 . 0 . 0 . 0 PORT=8080 CRON _ DB _ PATH=/data/CRON tab BASIC _ AUTH _ USER=admin BASIC _ AUTH _ PWD=123456 CRON tab-ui

00-1010 crontab-UI服务部署启动后,通过访问http://ip:8080,首先会要求您登录admin/123456。登录后,会看到Cronjobs任务管理的首页,如下图所示。

n/pgc-image/b1c5a728d4fe472aace0d0dcb8d870a0?from=pc">

cron-ui

以下应用过程均为docker部署的服务。

创建一个任务

点击New按钮,在打开的任务创建栏目中,输入相应的定时任务信息后,点击Save按钮,即可创建一个cron定时任务。

Name,可选项,任务名称,建议填写,便于管理。Command想要执行的命令,这里是要执行一个脚本。Quick Schedule设置周期执行,可以按照启动、每小时、每日、每周、每月、每年等指标快速制定计划任务。当然应用最多的仍然是cron表达式来制定周期性任务,当使用cron表达式时,书写完成需要点击Set按钮,此时Job栏目就会显示完整的cron任务表达式。Enable error logging,当勾选时,该定时任务将会记录错误日志,且可以通过web管理页面直接查看错误日志,在工作中,查找问题将会非常有帮助。

下图为示例任务创建,每分钟执行一个脚本。

创建任务

当点击Save按钮后,将会创建该任务,如下图所示。

cron任务列表

当任务创建完成后,如果发现有需要调整的地方,可以通过Edit按钮进行任务修改。本例中,将对hello任务轮播任务进行调整,之前创建时,没有勾选打印日志,勾选后,点击保存,如下图所示。此时将会出现日志查看按钮。

日志查看

启动任务

当点击运行时,会执行一次,此时并没有实现每分钟轮播功能,查看容器cron列表,也没有发现任何任务信息。需要点击Save to crontab按钮后,才能将cron任务配置写入到crontab中。本例使用了docker环境部署,因此可以登录到crontab-ui容器,查看容器的crontab任务情况

# 登录容器 docker exec -it alseambusher/crontab-ui sh # 只运行任务,没有点击Save to crontab按钮时,查看任务。此时服务器并没有crontab任务写入,并且查看日志只有一次输出,并没有循环执行 /crontab-ui # crontab -l # 点击Save to crontab按钮后,监控日志输出,发现每分钟打印一次,任务循环执行,再次查看容器的crontab任务列表, 发现任务已成功创建 /crontab-ui # crontab -l # */1 * * * * ((({ /sddy/sh /data/sh/hello.sh; } | tee /etc/crontabs/xPLSahWYLOVOW9pP.stdout) 3>&1 1>&2 2>&3 | tee /etc/crontabs/xPLSahWYLOVOW9pP.stderr) 3>&1 1>&2 2>&3)

停止任务

点击Disable按钮,可以将任务置为不可用,此时任务仍然在运行,置为不可用后,通过点击Save to crontab按钮后,将配置写入crontab中,就可以实现关停任务。

获取本机已有的crontab任务

当部署Crontab-UI之前,已经通过crontab -e命令创建了任务,也可以纳入到Crontab-UI进行管理。通过点击Get from crontab按钮从本机获取crontab服务。

获取本机已有任务

备份任务

点击页面上的Backup按钮,弹出框确认备份,即可实现当前所有cron任务的备份。crontab文件出现问题时,可以通过备份来进行恢复。

备份任务

备份确认

备份之后,如果不小心删除了某些任务,可以通过恢复到指定的备份。如下图恢复备份

备份恢复

从Backups列表中选择一个备份点,将进入备份恢复页面,在该页面用户可以选择恢复,也可以选择删除备份点。

备份恢复确认

导入/导出cron任务

导入/导出一般用于多台机器执行相同的任务。当有这种需求时,可以先在一台机器上进行cron服务配置,配置完成后可以通过导出按钮,将已创建好的任务数据库下载到本地。然后在其他需要执行这些任务的机器上部署Crontab-UI服务,并通过导入按钮,选择上述导出的本地数据库,可以实现快速任务构建。

导入导出

导出的文件一般是crontab.db命名,可以使用记事本打开该文档进行查看。该数据文件采用行JSON的形式存储,一行JSON对象描述一个任务,如下所示:

{ "name": "hello任务轮询", "command": "/sddy/sh /data/sh/hello.sh", "schedule": "*/1 * * * *", "stopped": true, "timestamp": "Thu Aug 12 2021 10:54:46 GMT+0000 (Coordinated Universal Time)", "logging": "false", "mailing": {}, "created": 1628765686866, "saved": true, "_id": "xPLSahWYLOVOW9pP" }

通过导入,可以在很大程度上加快内网定时任务的部署,同时因为是依靠导出再导入的方式,从某种方面看,只要搞定一台服务器的任务后,其他服务器的任务不会再出现BUG的现象,这将会在减轻任务部署的工作量的同时,会提高任务部署质量。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。