计划任务包括两种类型:
1、一次性计划任务 :未来某个时间执行一次指定任务。
2、周期性计划任务 :每到指定时间点就执行指定的任务,周期性重复执行。
一次性计划任务,常用有两个命令都可以实现此功能:at
、 batch
周期性计划任务,常用主要有有一个命令: crontab
本篇主要讲解at命令详细用法:
一次性计划任务at和周期性计划任务crontab执行的结果都会通过邮件发送给执行计划任务的用户(所以我们可以发现,哪怕最小化安装的centos 7系统,启动好系统默认也会监听25端口在127.0.0.1上。并且自带sendmail命令)。
一、安装使用at
1、安装at(centos 7.4最小化安装,不包含at命令)
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程序,不然等下配置提交计划任务时会有下面所示报错。
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命令使用格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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} |
二、通过at来创建任务(三种方式)
2.1、通过CLI来配置计划任务
2.1.1、使用at
命令新建一个任务,在17:59的时候echo显示字符串"向阳花博客-https://www.imzcy.cn"
直接使用at命令指定好时间后,会进入一个CLI界面,手动输入到时候后要执行哪些操作(可以一直回车指定多项操作),最后使用Ctrl+D提交并退出
1 2 3 4 5 |
[root@imzcy ~]# at 17:59 at> echo "向阳花博客-https://www.imzcy.cn" at> <EOT> job 1 at Sun Aug 26 17:59:00 2018 [root@imzcy ~]# |
2.1.2、使用at -l
或者atq
命令查看刚才创建的任务
1 2 3 4 5 6 7 |
[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 ~]# |
2.1.3、使用at -c
命令查看指定编号任务的具体内容
可以看到at计划任务使用的PATH环境变量包含哪些目录,如果任务中要执行的命令没包含在PATH环境变量中,记得要使用绝对路径引用命令。
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 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 ~]# |
2.1.4、查看任务执行结果
at计划任务的执行结果都会邮件通知对应的用户,所以直接查看/var/spool/mail/目录下对应用户文件的邮件内容或者使用mail命令指定编号查看都行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@imzcy ~]# cat /var/spool/mail/root From root@imzcy.cn Sun Aug 26 17:59:00 2018 Return-Path: <root@imzcy.cn> 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 ~]# |
2.2、通过读取文件中任务列表来创建计划任务
2.2.1、使用at -f
命令从指定文件中读取内容创建任务
1 2 3 4 5 6 |
[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 ~]# |
2.2.2 使用atq
命令查看创建的任务
1 2 3 |
[root@imzcy ~]# atq 2 Mon Aug 27 18:10:00 2018 a root [root@imzcy ~]# |
2.2.3 使用at -c
命令查看指定编号任务具体内容,判断是否正确创建任务
1 2 3 4 5 6 |
[root@imzcy ~]# at -c 2 |tail -n 4 ${SHELL:-/bin/sh} << 'marcinDELIMITER168abfa0' echo "你好呀!" marcinDELIMITER168abfa0 [root@imzcy ~]# |
2.2.4 使用at -d
命令删除指定编号任务
1 2 3 4 |
[root@imzcy ~]# at -d 2 [root@imzcy ~]# [root@imzcy ~]# atq [root@imzcy ~]# |
2.3、通过echo显示出要执行的内容来创建at任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[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 ~]# |
使用at命令创建的所有任务,都会以文件的格式保存在/var/spool/at/目录下面。任务被执行过之后或者提前使用atrm删除了,对应的文件也会被删除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[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 ~]# |
三、at常用时间格式
3.1 指定具体年月日时间来执行
1 2 3 |
[root@imzcy ~]# at -f test.txt 20:20 2018-09-05 job 3 at Wed Sep 5 20:20:00 2018 [root@imzcy ~]# |
3.2 指定10分钟之后执行
1 2 3 4 5 6 |
[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 ~]# |
3.3 指定1小时之后执行
1 2 3 |
[root@imzcy ~]# at -f test.txt now+1hours job 5 at Sun Aug 26 20:18:00 2018 [root@imzcy ~]# |
3.4 指定10天之后执行
1 2 3 |
[root@imzcy ~]# at -f test.txt now+10day job 6 at Wed Sep 5 19:13:00 2018 [root@imzcy ~]# |