计划任务包括两种类型:
1、一次性计划任务 :未来某个时间执行一次指定任务。
2、周期性计划任务 :每到指定时间点就执行指定的任务,周期性重复执行。
一次性计划任务,常用有两个命令都可以实现此功能:at 、 batch
周期性计划任务,常用主要有有一个命令: crontab
本篇主要讲解at命令详细用法:
一次性计划任务at和周期性计划任务crontab执行的结果都会通过邮件发送给执行计划任务的用户(所以我们可以发现,哪怕最小化安装的centos 7系统,启动好系统默认也会监听25端口在127.0.0.1上。并且自带sendmail命令)。
一、安装使用at
1、安装at(centos 7.4最小化安装,不包含at命令)
[root@imzcy ~]# yum -y install at
或者
[root@imzcy ~]# rpm -ivh at-3.1.13-23.el7.x86_64.rpm
1
2
3
[root@imzcy~]# yum -y install at
或者
[root@imzcy~]# rpm -ivh at-3.1.13-23.el7.x86_64.rpm
at离线包下载地址:密码:a7ze
2、启动atd程序,不然等下配置提交计划任务时会有下面所示报错。
[root@imzcy ~]# systemctl start atd
[root@imzcy ~]# systemctl enable atd
1
2
[root@imzcy~]# systemctl start atd
[root@imzcy~]# systemctl enable atd
[root@imzcy ~]# at 20:23
at> echo "你好"
at> job 1 at Thu May 3 20:23:00 2018
Can't open /var/run/atd.pid to signal atd. No atd running?
[root@imzcy ~]#
3、at命令使用格式:
at [option] TIME
option:
-q QUEUE
-l :列出指定队列中等待运行的作业;相当于atq
-d :删除指定的作业;相当于atrm
-c :查看具体作业任务
-f /path/from/somefile :从指定文件中读取任务
TIME:
HH:MM [YYYY-mm-dd]
noon,midnight,teatime
tomorrow
now+#{minutes,hours,days, OR weeks}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
at[option]TIME
option:
-qQUEUE
-l:列出指定队列中等待运行的作业;相当于atq
-d:删除指定的作业;相当于atrm
-c:查看具体作业任务
-f/path/from/somefile:从指定文件中读取任务
TIME:
HH:MM[YYYY-mm-dd]
noon,midnight,teatime
tomorrow
now+#{minutes,hours,days, OR weeks}
二、通过at来创建任务(三种方式)
2.1、通过CLI来配置计划任务
2.1.1、使用at命令新建一个任务,在17:59的时候echo显示字符串"向阳花博客-https://www.imzcy.cn"
直接使用at命令指定好时间后,会进入一个CLI界面,手动输入到时候后要执行哪些操作(可以一直回车指定多项操作),最后使用Ctrl+D提交并退出
[root@imzcy ~]# at 17:59
at> echo "向阳花博客-https://www.imzcy.cn"
at>
job 1 at Sun Aug 26 17:59:00 2018
[root@imzcy ~]#
1
2
3
4
5
[root@imzcy~]# at 17:59
at>echo"向阳花博客-https://www.imzcy.cn"
at>
job1atSunAug2617:59:002018
[root@imzcy~]#
2.1.2、使用at -l或者atq命令查看刚才创建的任务
[root@imzcy ~]# at -l
1 Sun Aug 26 17:59:00 2018 a root
[root@imzcy ~]#
[root@imzcy ~]# atq
1 Sun Aug 26 17:59:00 2018 a root
[root@imzcy ~]#
1
2
3
4
5
6
7
[root@imzcy~]# at -l
1SunAug2617:59:002018aroot
[root@imzcy~]#
[root@imzcy~]# atq
1SunAug2617:59:002018aroot
[root@imzcy~]#
2.1.3、使用at -c命令查看指定编号任务的具体内容
可以看到at计划任务使用的PATH环境变量包含哪些目录,如果任务中要执行的命令没包含在PATH环境变量中,记得要使用绝对路径引用命令。
[root@imzcy ~]# at -c 1
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
XDG_SESSION_ID=3; export XDG_SESSION_ID
HOSTNAME=imzcy.cn; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=192.168.0.121\ 54822\ 22; export SSH_CLIENT
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export USER
LS_COLORS=rs=0:di=01\;34:ln=01\;36:mh=00:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:mi=01\;05\;37\;41:su=37\;41:sg=30\;43:ca=30\;41:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.arc=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lha=01\;31:\*.lz4=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.tzo=01\;31:\*.t7z=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lrz=01\;31:\*.lz=01\;31:\*.lzo=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.bz=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.war=01\;31:\*.ear=01\;31:\*.sar=01\;31:\*.rar=01\;31:\*.alz=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.cab=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.svgz=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.webm=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.flv=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.cgm=01\;35:\*.emf=01\;35:\*.axv=01\;35:\*.anx=01\;35:\*.ogv=01\;35:\*.ogx=01\;35:\*.aac=01\;36:\*.au=01\;36:\*.flac=01\;36:\*.mid=01\;36:\*.midi=01\;36:\*.mka=01\;36:\*.mp3=01\;36:\*.mpc=01\;36:\*.ogg=01\;36:\*.ra=01\;36:\*.wav=01\;36:\*.axa=01\;36:\*.oga=01\;36:\*.spx=01\;36:\*.xspf=01\;36:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=zh_CN.UTF-8; export LANG
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
SSH_CONNECTION=192.168.0.121\ 54822\ 192.168.0.122\ 22; export SSH_CONNECTION
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/0; export XDG_RUNTIME_DIR
cd /root || {
echo 'Execution directory inaccessible' >&2
exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER08b942b4'
echo "向阳花博客-https://www.imzcy.cn"
marcinDELIMITER08b942b4
[root@imzcy ~]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@imzcy~]# at -c 1
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask22
XDG_SESSION_ID=3;exportXDG_SESSION_ID
HOSTNAME=imzcy.cn;exportHOSTNAME
SELINUX_ROLE_REQUESTED=;exportSELINUX_ROLE_REQUESTED
SHELL=/bin/bash;exportSHELL
HISTSIZE=1000;exportHISTSIZE
SSH_CLIENT=192.168.0.121\54822\22;exportSSH_CLIENT
SELINUX_USE_CURRENT_RANGE=;exportSELINUX_USE_CURRENT_RANGE
SSH_TTY=/dev/pts/0;exportSSH_TTY
USER=root;exportUSER
LS_COLORS=rs=0:di=01\;34:ln=01\;36:mh=00:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:mi=01\;05\;37\;41:su=37\;41:sg=30\;43:ca=30\;41:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.arc=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lha=01\;31:\*.lz4=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.tzo=01\;31:\*.t7z=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lrz=01\;31:\*.lz=01\;31:\*.lzo=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.bz=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.war=01\;31:\*.ear=01\;31:\*.sar=01\;31:\*.rar=01\;31:\*.alz=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.cab=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.svgz=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.webm=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.flv=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.cgm=01\;35:\*.emf=01\;35:\*.axv=01\;35:\*.anx=01\;35:\*.ogv=01\;35:\*.ogx=01\;35:\*.aac=01\;36:\*.au=01\;36:\*.flac=01\;36:\*.mid=01\;36:\*.midi=01\;36:\*.mka=01\;36:\*.mp3=01\;36:\*.mpc=01\;36:\*.ogg=01\;36:\*.ra=01\;36:\*.wav=01\;36:\*.axa=01\;36:\*.oga=01\;36:\*.spx=01\;36:\*.xspf=01\;36:;exportLS_COLORS
MAIL=/var/spool/mail/root;exportMAIL
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin;exportPATH
PWD=/root;exportPWD
LANG=zh_CN.UTF-8;exportLANG
SELINUX_LEVEL_REQUESTED=;exportSELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups;exportHISTCONTROL
SHLVL=1;exportSHLVL
HOME=/root;exportHOME
LOGNAME=root;exportLOGNAME
SSH_CONNECTION=192.168.0.121\54822\192.168.0.122\22;exportSSH_CONNECTION
LESSOPEN=\|\|/usr/bin/lesspipe.sh\%s;exportLESSOPEN
XDG_RUNTIME_DIR=/run/user/0;exportXDG_RUNTIME_DIR
cd/root||{
echo'Execution directory inaccessible'>&2
exit1
}
${SHELL:-/bin/sh}<
echo"向阳花博客-https://www.imzcy.cn"
marcinDELIMITER08b942b4
[root@imzcy~]#
2.1.4、查看任务执行结果
at计划任务的执行结果都会邮件通知对应的用户,所以直接查看/var/spool/mail/目录下对应用户文件的邮件内容或者使用mail命令指定编号查看都行。
[root@imzcy ~]# cat /var/spool/mail/root
From root@imzcy.cn Sun Aug 26 17:59:00 2018
Return-Path:
X-Original-To: root
Delivered-To: root@imzcy.cn
Received: by imzcy.cn (Postfix, from userid 0)
id 949E12441455; Sun, 26 Aug 2018 17:59:00 +0800 (CST)
Subject: Output from your job 1
To: root@imzcy.cn
Message-Id: <20180826095900.949E12441455@imzcy.cn>
Date: Sun, 26 Aug 2018 17:59:00 +0800 (CST)
From: root@imzcy.cn (root)
向阳花博客-https://www.imzcy.cn
[root@imzcy ~]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@imzcy~]# cat /var/spool/mail/root
Fromroot@imzcy.cnSunAug2617:59:002018
Return-Path:
X-Original-To:root
Delivered-To:root@imzcy.cn
Received:byimzcy.cn(Postfix,fromuserid0)
id949E12441455;Sun,26Aug201817:59:00+0800(CST)
Subject:Outputfromyourjob1
To:root@imzcy.cn
Message-Id:<20180826095900.949E12441455@imzcy.cn>
Date:Sun,26Aug201817:59:00+0800(CST)
From:root@imzcy.cn(root)
向阳花博客-https://www.imzcy.cn
[root@imzcy~]#
2.2、通过读取文件中任务列表来创建计划任务
2.2.1、使用at -f命令从指定文件中读取内容创建任务
[root@imzcy ~]# cat test.txt
echo "你好呀!"
[root@imzcy ~]#
[root@imzcy ~]# at -f test.txt 18:10
job 2 at Mon Aug 27 18:10:00 2018
[root@imzcy ~]#
1
2
3
4
5
6
[root@imzcy~]# cat test.txt
echo"你好呀!"
[root@imzcy~]#
[root@imzcy~]# at -f test.txt 18:10
job2atMonAug2718:10:002018
[root@imzcy~]#
2.2.2 使用atq命令查看创建的任务
[root@imzcy ~]# atq
2 Mon Aug 27 18:10:00 2018 a root
[root@imzcy ~]#
1
2
3
[root@imzcy~]# atq
2MonAug2718:10:002018aroot
[root@imzcy~]#
2.2.3 使用at -c命令查看指定编号任务具体内容,判断是否正确创建任务
[root@imzcy ~]# at -c 2 |tail -n 4
${SHELL:-/bin/sh} << 'marcinDELIMITER168abfa0'
echo "你好呀!"
marcinDELIMITER168abfa0
[root@imzcy ~]#
1
2
3
4
5
6
[root@imzcy~]# at -c 2 |tail -n 4
${SHELL:-/bin/sh}<
echo"你好呀!"
marcinDELIMITER168abfa0
[root@imzcy~]#
2.2.4 使用at -d命令删除指定编号任务
[root@imzcy ~]# at -d 2
[root@imzcy ~]#
[root@imzcy ~]# atq
[root@imzcy ~]#
1
2
3
4
[root@imzcy~]# at -d 2
[root@imzcy~]#
[root@imzcy~]# atq
[root@imzcy~]#
2.3、通过echo显示出要执行的内容来创建at任务
[root@imzcy ~]# echo 'echo "哈哈哈!"' |at 19:20
job 3 at Sun Aug 26 19:20:00 2018
[root@imzcy ~]#
[root@imzcy ~]# atq
3 Sun Aug 26 19:20:00 2018 a root
[root@imzcy ~]#
[root@imzcy ~]# at -c 3 |tail -n 4
${SHELL:-/bin/sh} << 'marcinDELIMITER771ffe7b'
echo "哈哈哈!"
marcinDELIMITER771ffe7b
[root@imzcy ~]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@imzcy~]# echo 'echo "哈哈哈!"' |at 19:20
job3atSunAug2619:20:002018
[root@imzcy~]#
[root@imzcy~]# atq
3SunAug2619:20:002018aroot
[root@imzcy~]#
[root@imzcy~]# at -c 3 |tail -n 4
${SHELL:-/bin/sh}<
echo"哈哈哈!"
marcinDELIMITER771ffe7b
[root@imzcy~]#
使用at命令创建的所有任务,都会以文件的格式保存在/var/spool/at/目录下面。任务被执行过之后或者提前使用atrm删除了,对应的文件也会被删除。
[root@imzcy ~]# ll /var/spool/at/
总用量 20
-rwx------. 1 root root 2795 8月 26 18:19 a0000801868804
-rwx------. 1 root root 2795 8月 26 19:13 a0000c0186a981
-rwx------. 1 root root 2795 8月 26 19:14 a0000d0186a9c4
-rwx------. 1 root root 2795 8月 26 19:18 a0000e01867182
-rwx------. 1 root root 2789 8月 26 19:36 a0000f01867184
drwx------. 2 root root 6 8月 26 19:22 spool
[root@imzcy ~]#
[root@imzcy ~]# tail -n 4 /var/spool/at/a0000801868804
${SHELL:-/bin/sh} << 'marcinDELIMITER27c1dc93'
echo "你好呀!"
marcinDELIMITER27c1dc93
[root@imzcy ~]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@imzcy~]# ll /var/spool/at/
总用量20
-rwx------.1rootroot27958月2618:19a0000801868804
-rwx------.1rootroot27958月2619:13a0000c0186a981
-rwx------.1rootroot27958月2619:14a0000d0186a9c4
-rwx------.1rootroot27958月2619:18a0000e01867182
-rwx------.1rootroot27898月2619:36a0000f01867184
drwx------.2rootroot68月2619:22spool
[root@imzcy~]#
[root@imzcy~]# tail -n 4 /var/spool/at/a0000801868804
${SHELL:-/bin/sh}<
echo"你好呀!"
marcinDELIMITER27c1dc93
[root@imzcy~]#
三、at常用时间格式
3.1 指定具体年月日时间来执行
[root@imzcy ~]# at -f test.txt 20:20 2018-09-05
job 3 at Wed Sep 5 20:20:00 2018
[root@imzcy ~]#
1
2
3
[root@imzcy~]# at -f test.txt 20:20 2018-09-05
job3atWedSep520:20:002018
[root@imzcy~]#
3.2 指定10分钟之后执行
[root@imzcy ~]# date
2018年 08月 26日 星期日 19:12:45 CST
[root@imzcy ~]#
[root@imzcy ~]# at -f test.txt now+10minutes
job 4 at Sun Aug 26 19:22:00 2018
[root@imzcy ~]#
1
2
3
4
5
6
[root@imzcy~]# date
2018年08月26日星期日19:12:45CST
[root@imzcy~]#
[root@imzcy~]# at -f test.txt now+10minutes
job4atSunAug2619:22:002018
[root@imzcy~]#
3.3 指定1小时之后执行
[root@imzcy ~]# at -f test.txt now+1hours
job 5 at Sun Aug 26 20:18:00 2018
[root@imzcy ~]#
1
2
3
[root@imzcy~]# at -f test.txt now+1hours
job5atSunAug2620:18:002018
[root@imzcy~]#
3.4 指定10天之后执行
[root@imzcy ~]# at -f test.txt now+10day
job 6 at Wed Sep 5 19:13:00 2018
[root@imzcy ~]#
1
2
3
[root@imzcy~]# at -f test.txt now+10day
job6atWedSep519:13:002018
[root@imzcy~]#