
任务管理
介绍
- 在系统运维过程中,可能需要在某个预设的时间执行特定任务
- 如:定时发送邮件、备份并清空日志文件等任务;
- 任务的内容可以看做是一系列命令或一个脚本,我们需要在特定时间去执行;
- at语法
- at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间
- at -c 作业[作业…]
类型
计划执行,在特定时间运行一次:at
定期执行,按周期执行多次:cron
计划执行at
at命令可以指定Linux在特定时刻运行脚本;
atd是at的守护进程,在系统启动时会以后台模式运行;
atd定期检查系统上/var/spool/at
目录中,通过at命令写入的任务;
这个命令至少需要指定一个命令和一个执行时间;
时间上,at命令可以只指定时间,也可以时间日期一起指定;
指定时间的方式有两种
绝对计时和相对计时
绝对计时
格式:at 时间 日期
- 当前的时间:
hh:mm
,如果时间已经过去,则会在第二天执行; - 使用midnight、noon、teatime来指定时间;
- teatime饮茶时间,一般指下午4点;
- 采用12小时计时制,即在时间后面加上AM或PM来说明是上午还是下午;
- 指定命令执行的具体日期,格式为:
month day
或mm/dd/yy
或dd.mm.yy
。指定日期必须在指定时间的后面; - 也可以用
today
和tommorrow
表示今天或明天;
相对计时
格式:at now+数量 单位
- 格式为
now+count time-units
,- now就是当前时间
- time-units是时间单位;
- 这里可以是
- minutes
- hours
- days
- weeks
- 这里可以是
- count是时间的数量,
- 可以用数字,表示几天、几个小时等;
其他
可以使用today
或tomorrow
来表示日期;
示例
假定目前时间为 12:30 2020年6月7日,要在今天16:30执行某个命令,命令如下:
绝对计时
- at 16:30
- at 4:30pm
- at 16:30 today
- at 16:30 7.6.20
- at 16:30 6/7/20
- at 16:30 Jun 7
相对计时
at now+240 minutes
at now+4 hours
执行权限
对于at命令,需要定时执行的命令来自标准输入或者使用-f指定文件中读取执行;
如果at命令是su切换到用户shell执行的,那么当前用户会被认为是执行用户,所有错误和输出结果都会返回给这个用户;
对于其他用户,是否允许被使用at命令,主要在于/etc/at.allow
和/etc/at.deny
文件中指定;
at.allow
的优先级高于at.deny
。
其他管理命令
at TIME
:增加任务
atq
:查询所有任务
atq -c <id>
:查询任务详细信息
atrm <id>
:删除指定任务
使用
1 | 添加一个定时事件 |
1 | 详细查询指定定时事件 |
周期性执行cron
周期性重复执行一些命令,使用cron;
- cron会搜索
/var/spool/cron
目录,寻找以/etc/passwd
文件中用户名命名的crontab文件,然后将crontab文件装入内存,即用户cron时间表; - cron还将搜索
/etc/crontab
文件,即系统cron时间表; - cron启动后,先检查是否存在需要运行的crontab文件;
- 若没有则转入睡眠状态,释放系统资源;
- 之后每分钟唤醒一次,查看当前是否有需要运行的命令。
crontab管理cron进程表格
crontab用于安装、删除或打印用于驱动cron后台进程的表格;
用户把需要执行的命令序列放到crontab文件中执行,每个用户都拥有自己的crontab文件;
crontab命令:
1 | crontab -u # 设置指定用户的cron服务 |
crontab文件中的时间表
在crontab文件中指定需要执行的命令和执行时间;
文件每行有6个域,前5个域指定命令执行的时间,最后一个是要执行的命令,格式如下:
格式
1 | minute hour day-of-month month-of-year day-of-week commands |
参数 | 描述 |
---|---|
minute | 分钟 0~59 |
hour | 小时 0~23 |
day-of-month | 一个月的第几天 1-31 |
month-of-year | 一年的第几个月 1~12 |
day-of-week | 一周的周几 0 ~ 6 |
commands | 执行的命令 |
如:每周一上午8:00执行命令
1 | 00 08 * * 1 commands |
参数
参数 | 描述 |
---|---|
* | 所有取值范围内的数字 |
/ | 每,如“*/5”指的是每5个单位; |
- | 从 一个数字 到另一个数字 |
, | 离散的数字 |
如:晚上11点到早上8点之间每过2小时,在/tmp/test.txt文件中加入sleepy文本:
1 | 0 23-8/2 * * * echo "sleepy" >> /tmp/test.txt |
crontab文件 /etc/ctontab
这个配置文件针对系统的任务。
1 | SHELL=/bin/sh |
crontab使用
crontab -l
:查询当前定时事件;crontab -e
:编辑一个定时任务;- 将打开一个vim编辑器页面,然后使用上面的表达式可以创建任务;
crontab -e
编辑一个定时任务;1
[root@localhost tmp]# crontab -e
1
*/1 * * * * echo "qqqqq" > /tmp/q.txt
查看当前定时任务
1
2[root@localhost tmp]# crontab -l
*/1 * * * * echo "qqqqq" > /tmp/q.txt删除定时任务
1
[root@localhost tmp]# crontab -r