一、一次性任务计划: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)查看单个任务的具体内容
指定任务的队列号,可查看其详细信息,用到的变量,命令,执行时间用户等信息
[[email protected]
~]# 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.3950177\ 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.3950177\ 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实现;