【精选】Linux笔记:使用 cron & at & anacron 定时执行任务 您所在的位置:网站首页 crontab可以设置到秒吗 【精选】Linux笔记:使用 cron & at & anacron 定时执行任务

【精选】Linux笔记:使用 cron & at & anacron 定时执行任务

2023-11-09 02:31| 来源: 网络整理| 查看: 265

文章目录 目的cronatanacron总结

目的

日常或工作使用中经常会有设定某个时间单次或重复执行任务的需求,在linux中实现这些需求最常用的就是 cron & anacron & at 这三个工具了,这篇文章将对这些工具的使用做个简单说明。

cron

cron(crond)是linux下用于定期执行任务的工具。作为用户而言要创建和管理自己的定期执行任务只要使用 crontab 命令就行了。

crontab命令 crontab 命令主要操作的是一个文件,当你初次用该指令建立定期执行任务时会在 /var/spool/cron/crontabs/ 目录下生成一个和你用户名相同的文件,这个文件中记录了该用户设置的所有定期执行任务。

任务配置文件格式 在crontab的配置文件中配置任务,每一行为一条任务,以#开头的为注释。每一行开头五个字段为时间相关参数,之后为需要进行的任务命令,参数间用空格隔开。参数顺序和取值如下: 在这里插入图片描述 配置文件的编写最主要的是理解时间相关参数,下面是一些例子:

* * * * * command 每分钟执行一次*/10 * * * sun command 每周日每隔十分钟执行一次0 0,12 * * * command 每天0点整和12点整各执行一次0 * 1-3 * * command 每月1号到3号每小时整执行一次0 5 * * 1 command 每周一五点整执行一次

编辑任务配置文件 使用 crontab -e 可以编辑当前用户的任务配置文件,初次打开时可能会提示选择要使用的文本编辑器。下面是个简单的演示: 在这里插入图片描述 上面演示中每分钟向log文件输出了时间信息。

如果想要删除任务的话直接在配置文件中删除或是注释掉即可。

除了直接使用 crontab -e 编辑文档,还可以使用 crontab file 将file文件中的任务列表载入到配置文件中。

crontab命令常用选项

选项描述-u用来设定某个用户的 crontab 服务-e编辑用户的配置文件,默认为当前用户-l显示用户的配置文件,默认为当前用户-r删除用户的配置文件,默认为当前用户-i删除用户的配置文件时进行询问

cron服务 cron(crond)通常是linux自带的,会随着系统启动。你可以用 /etc/init.d/cron status 命令查看其运行状态。如果使用中工作不正常可以使用 /etc/init.d/cron restart 来重新启动服务。

如果atd服务没有开机启动的话可以使用 chkconfig crond on 命令来将其设置为开机启动。

使用权限 cron(crond)的权限控制是依靠 /etc/cron.allow(白名单)和 /etc/cron.deny(黑名单)这两个文件来实现的,如果有权限问题或需求可以查看这两个文件。

更多内容 更多内容可以使用 man cron 、 man crontab 查看相关用户手册。

at

at是一个用于设置在指定时间执行一次任务的工具。

安装 在Raspbian、Ubuntu等系统中可以使用 sudo apt install at 命令来安装 at。

设置定时任务 使用 at timespec 可以启动该工具,然后在之后输入要执行的任务,最后按键盘 ctrl + d 保存并退出。 在这里插入图片描述 设置完成后会显示任务编号和执行时间。注意定时任务本身运行时是不会在前台输出信息的。

启动at工具时常用的时间格式主要有下面一些:

格式用法HH:MM例:15:20,在下一次的15:30运行YY-MM-DD例:2021-08-21,在2021年8月21日的当前时间点运行例:14:00 2021-08-21,在2021年8月21日的14:00运行now + count time-units例:now + 5 minutes,在当前时间的5分钟后运行可用单位:minutes, hours, days, or weekstime + count time-units例:15:00 + 5 days,在5天后的15:00后运行

查询已设置任务 使用 atq 可以查询已设置但还未执行的任务: 在这里插入图片描述 atq输出每一行为一个任务,分别显示任务号、执行时间、队列名称、创建者。上面演示中我创建了两个任务,查询时可以看到两行信息。当其中一个任务执行后再次查询就只剩下一个任务了。

删除已设置任务 使用 atrm 任务号 可以删除待进行的任务: 在这里插入图片描述

batch命令 at命令还有可附带的命令batch,该命令功能和at基本一样,唯一的区别是使用该命令设置的任务只会在系统空闲时执行。另外使用该命令设置的任务默认队列名称为b

atd服务 使用at方式设置的定时任务依赖于atd服务,可以使用 /etc/init.d/atd status 来查看该服务是否运行,如果没有运行的话使用 /etc/init.d/atd start 来启动。你也可以使用 /etc/init.d/atd stop 来停止该服务。

如果atd服务没有开机启动的话可以使用 chkconfig atd on 命令来将其设置为开机启动。

使用权限 at的权限控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,如果有权限问题或需求可以查看这两个文件。

更多内容 更多内容可以使用 man at 、 man atd 查看相关用户手册。

anacron

使用 crontab 创建的任务有一个问题是,如果系统关机了,关机的期间原本需要执行的任务将不再执行了,anacron就是来对这块进行补充的。

在Raspbian、Ubuntu等系统中可以使用 sudo apt install anacron 命令来安装 anacron。

anacron和cron差不多也有一个配置文件 /etc/anacrontab ,默认情况下其中内容可能如下:

# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/root LOGNAME=root # These replace cron's entries 1 5 cron.daily run-parts --report /etc/cron.daily 7 10 cron.weekly run-parts --report /etc/cron.weekly @monthly 15 cron.monthly run-parts --report /etc/cron.monthly

最后三行分别是三项任务,相关说明如下:

检查时间延时时间任务名称任务指令描述15cron.dailyrun-parts --report /etc/cron.daily每天延迟5分钟后检查任务如果超过一条没执行则执行/etc/cron.daily中所有任务710cron.weeklyrun-parts --report /etc/cron.weekly每周延迟10分钟后检查任务如果超过一条没执行则执行/etc/cron.weekly中所有任务@monthly15cron.monthlyrun-parts --report /etc/cron.monthly每月延迟15分钟后检查任务如果超过一条没执行则执行/etc/cron.monthly中所有任务

上面检查时间至少是以天为单位,或者也可以用@daily 、@weekly、@monthly这些;延时时间以分钟为单位。

把你想要周期执行的任务放到 /etc/cron.{daily,weekly,monthly} 目录中它就会按照上述规则执行了。当然你也可以编写自己的任务规则。

anacron本身也是一条执行,可以控制全体或单条任务相关内容。

更多内容可以参考 man anacron 查看相关用户手册。

总结

Linux中创建定时执行任务还是比较简单的,基本上只要能够理解crontab文件的编写,其它问题都不大。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有