一、一次性任务计划:at、batch
1.batch:系统自行选择在系统资源较空闲的时间去执行指定的任务
用法类似于at,但只要提交所需执行的命令
2.at:指定未来的某时间点执行一次某任务
(1)用法格式:at [OPTION]... TIME
1)TIME格式:
HH:MM [YYYY-mm-dd]:直接指明具体的时间
noon,midnight, teatime:中午、午夜、下午茶时间(下午四点左右)
tomorrow:明天
now+#:现在之后的多久,可使用表示单位为minutes, hours, days, OR weeks
2)OPTION常用选项
-l:查看作业队列,相当于atq
-f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,不用交互式输入;
-d #:删除指定的作业,相当于atrm;
-c #:查看指定作业的具体内容;
-q QUEUE:指明队列;
3)Ctrl+D :提交一次性任务,退出at
(2)示例:
1)创建一次性任务,并查看任务列表
at的作业有队列,用单个字母表示,默认都使用a队列;
一次性任务在执行完成后消失,不再在队列中显示,执行结果邮件发送给MAILTO指定的用户
2)查看单个任务的具体内容
指定任务的队列号,可查看其详细信息,用到的变量,命令,执行时间用户等信息
[root@localhost ~]# at -c 7
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=localhost.localdomain; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
SSH_CLIENT=172.16.250.39\ 50177\ 22; export SSH_CLIENT
QTDIR=/usr/lib64/qt-3.3; export QTDIR
QTINC=/usr/lib64/qt-3.3/include; export QTINC
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:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.tlz=01\;31:\*.txz=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.lz=01\;31:\*.xz=01\;31:\*.bz2=01\;31:\*.tbz=01\;31:\*.tbz2=01\;31:\*.bz=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=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:\*.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/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=en_US.UTF-8; export LANG
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass; export SSH_ASKPASS
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
QTLIB=/usr/lib64/qt-3.3/lib; export QTLIB
CVS_RSH=ssh; export CVS_RSH
SSH_CONNECTION=172.16.250.39\ 50177\ 172.16.249.161\ 22; export SSH_CONNECTION
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES
cd /root || {
echo 'Execution directory inaccessible' >&2
exit 1
}
${SHELL:-/bin/sh} << 'marcinDELIMITER0fed9e36'
cat /etc/passed
marcinDELIMITER0fed9e36
3)删除指定任务(对比)
二、周期性任务计划:cron(crontab、anacron)
1.服务程序:cronle
cronle (6、7)主程序包,提供crond守护及相关辅助工具
确保crond守护进程(daemon)处于运行状态:
CentOS 7:systemctl status crond.service
结果Active: active (running) ... …
CentOS 6:service crond status
... is running.
2.提交cron方式
(1)专用配置文件,有固定格式
(2)不建议使用文本编辑器直接编辑此文件;要使用crontab命令;
3.cron任务分类:
(1)系统cron任务:主要用于实现系统自身的维护;
系统cron的配置格式:/etc/crontabSHELL=/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
注释:
1)每一行定义一个周期性任务,共7个字段;
* * * * * : 定义周期性时间,分时日月周
user-name : 运行任务的用户身份
command to be executed:任务
2)环境变量不同于用户登录后获得的环境,建议命令使用绝对路径,或者自定义PATH环境变量;
3)执行结果邮件发送给MAILTO指定的用户
(2)用户cron任务:crontab命令
用户cron的配置格式:/var/spool/cron/USERNAME
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
# | | | | |
# * * * * * command to be executed
注释:
1)每行定义一个cron任务,共6个字段;
2)环境变量不同于用户登录后获得的环境,建议命令使用绝对路径,或者自定义PATH环境变量;
3)邮件发送给当前用户;
4.* * * * *时间表示法
(1)表示方法:特定值 * , - /
1)特定值:给定时间点有效取值范围内的值;
注意:day of week 和 day of month一般不同时使用;
2)*: 给定时间点上有效取值范围内的所有值;表“每..”
3) #,#,#:离散取值, , 在时间点上使用逗号分隔的多个值;
4)#-#:连续取值:-, 在时间点上使用-连接开头和结束
5)/#:在指定时间点上,定义步长: /#:#即步长;
注释:
1)指定的时间点不能被步长整除时,其意义将不复存在;
2)最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其它机制;
3)定义成每分钟任务:而在利用脚本实现在每分钟之内,循环执行多次;
(2)示例
3 * * * *:每小时执行一次;每小时的第3分钟;
3 4 * * 5:每周执行一次;每周5的4点3分;
5 6 7 * *:每月执行一次;每月的7号的6点5分;
7 8 9 10 *:每年执行一次;每年的10月9号8点7分;
9 8 * * 3,7:每周三和周日;
0 8,20 * * 3,7:
0 9-18 * * 1-5:
*/5 * * * *:每5分钟执行一次某任务;
5.crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-e:编辑任务;
-l:列出所有任务;
-r:移除所有任务;即删除/var/spool/cron/USERNAME文件;
-i:在使用-r选项移除所有任务时提示用户确认;
-u user:root用户可为指定用户管理cron任务;
注释:
(1)运行结果以邮件通知给当前用户;拒绝接收邮件
COMMAND > /dev/null 将正确结果导入到数据黑洞,只报告错误结果
COMMAND &> /dev/null 将所有结果都导入数据黑洞
(2)定义COMMAND时,如果命令需要用到%要对其转意;但放置于单引号中的%转意
6.如果期望某时间因故未能按时执行,下次开机后无论是否到了相应时间点都要执行一次,可使用anacron实现;