1.at命令
at 命令是用来执行一次性任务,比如要在二十分钟后重启,要在 2 分钟后启动一个可执行程序,或者在一天后执行一个脚本。适合应对突发性和临时性的任务。
查看服务是否运行:
systemctl status atd
at命令:
at [options] [TIME]
options:
-V:查看当前版本号
-m:当任务完成时给用户发送邮件
-M:当任务完成时不发送邮件
-f:从文件中读取任务
-l:列出所有任务,Is an alias for atq,同atq命令。
-d num:删除num号定时任务,Is an alias for atrm,同atrm命令
-c num:查看num号定时任务
TIME:设定定时任务时间
HH:MM 如: at 02:30
HH:MM YYYY-MM-DD 如:at 8:00 2020-01-01
now + 时间:比如在十分钟后:at now + 10 min,在一天后:at now + 1 day
特殊时间:midnight, noon, or teatime
实例演示:
1.添加定时任务
~]# at 10:00
> ls /tmp
> <EOT> #ctrl+d结束
~]# at now+10min
> ls /tmp
~# at now+10 -f /tmp/file
~]# cat /tmp/file
echo "hello world."
2.查看定时任务
~]# at -l
1 Thu Oct 25 11:00:00 2018 a root
2 Thu Oct 25 10:58:00 2018 a root
3 Thu Oct 25 10:58:00 2018 a root
~]# atq
1 Thu Oct 25 11:00:00 2018 a root
2 Thu Oct 25 10:58:00 2018 a root
3 Thu Oct 25 10:58:00 2018 a root
3.查看定时任务内容
~]# at -c 1
...
ls /tmp
4.删除计划任务
~]# at -d 1
~]# at -l
2 Thu Oct 25 10:58:00 2018 a root
3 Thu Oct 25 10:58:00 2018 a root
总结:
at 是一个一次性定时的命令,守护进程 atd 为它提供服务。如果需要周期性定时任务,需要使用 crontab 命令。
2.crontab命令
crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。
查看crond是否启动:
systemctl status crond #centos7
service crond status #centos6
cron任务分为两类:
系统cron任务:主要用于实现系统自身的维护
手动编辑:/etc/crontab 文件
用户cron任务:
crontab命令
系统cron任务配置:/etc/crontab
~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
用户cron任务:/var/spool/cron/USERNAME
/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件。
crontab命令:
crontab [-u user] [options]
-e:创建定时任务
-l:列出所有任务
-r:移除所有任务,即删除/var/spool/cron/USERNAME
-i:在使用-r选项移除所有任务时提醒用户确认
-u user:root用户可为指定用户管理cron任务。
文件格式:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour :表示小时,可以是从0到23之间的任何整数。
day :表示日期,可以是从1到31之间的任何整数。
month :表示月份,可以是从1到12之间的任何整数。
week :表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command :要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
注:
1.运行结果以邮件通知当前用户,如果拒绝接受邮件
(1) COMMAND >/dev/null
(2) COMMAND &> /dev/null
2.某任务在指定的时间因关机未能执行,下次开机将不会执行该任务,如果期望某时间因故未能按时执行,下次开机后无论是否到来相应时间点do偶要执行一次,可使用anacron实现。
实例演示:
1.在每周一、二、三的凌晨3点25分,都需要使用tar命令把某个数据目录进行打包处理,使其作为一个备份文件。
25 3 * * 1,2,3 /usr/bin/tar -xzvf backup.tar.gz /work
25 3 * * 1-3 /usr/bin/tar -xzvf backup.tar.gz /work
2.每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令]
*/15 * * * * /usr/bin/ls
注:分的设置不要为*,执行命令路径要用绝对路径。