Linux周期性任务计划
时间:2018-12-17 16:31 来源:linux.it.net.cn 作者:IT
一、Linux任务计划
1、一次性任务计划执行:
(1)at
(2)batch
2、周期性任务执行:
(1)crontab
(2)anacron
二、一次性任务执行
1、at命令:
分类:
(1)交互式:让用户在at>提示符下输入多个要执行的命令
(2)批处理:将任务的个命令写入文件由at进行调用
2、at交互式处理常用格式: at TIME
(1)在at>下输入命令即可
(2)按Ctrl+D可提交任务(作业)
(3)例:
# at 3:44
at> cat /etc/fstab
按Ctrl+D
at><EOF>
3、查看任务命令
(1)格式:at -l
(2)命令atq也可以实现查看任务队列
(3)例:
# at -l
11 2016-11-04 02:55 a root
任务号 时间 队列字母 发起任务者
4、添加任务队列
(1)格式:at -q 字母 TIME
(2)例:
# at -q a 03:55
# at> cat /root/hh.sh
# at -l
5、删除一个尚未执行的作业
(1)格式:at -d job_num
(2)或者用atrm命令:atrm job_num
(3)例:
# at -l 先查看
# at -d 14
# at -l 检查
或者
# atrm 14
# at -l
6、at批处理常用格式:
(1)at -f /PATH/TO/FILE TIME
(2)例:
# vim /root/at.txt
cat /etc/fstab
ls
保存退出
# at -f /root/at.txt 4:50
# at -l 检查
7、TIME的指定方式
(1)模糊时间:
①now ②noon(中午12点) ③midnight(晚上12点) ④teatime(下午4点)
⑤tomorrow
(2)例:
# at now+3min
可制定3分钟后的作业
# at -q a noon
可指定任务队列为a,中午的作业。
# at -f /root/at.txt now+1day
可指定从现在开始后的一天执行批处理任务
# at -f /root/at.txt now+2days
可指定从现在开始后的两天执行批处理任务
(3)TIME的指定十分灵活,具体可参照man手册。
8、任务的执行结果会通过邮件的方式发送给任务提交者
(1)使用mail命令:交互模式查看处理接收邮件
(2)交互模式发送邮件
①指定发送主题:mail -s “suject” 接收者
②可用输入重定向指定发送内容:< /path/to/somefile
例:
③可通过管道来提交邮件内容:
例:
# echo -e "Hello\nking" | mail -s "hello,buddy" root
9、batch命令
(1)特点:与at不同的是,不能指定时间:它自动选择系统空闲时间执行。
10、文件/etc/at.deny 为at命令作业控制列表(黑名单),可以定义谁能使用at命令,谁不能使用。
(1)写入用户名,该用户就不能使用at命令
(2)例:
# vim /etc/at.deny
hadoop
保存退出
# su - hadoop
$ at 14:30
显示结果:
You do not have permission to use at.
二、周期性任务计划(默认以分钟为最小单位)
1、cron
(1)crond:守护进程,运行在后台,随时监视着进程,等待执行。
服务进程的工作方式:阻塞、轮询
2、cron分类
(1)系统cron
①系统cron的配置文件在/etc/crontab。
②文件内容
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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
③上述文件内容中的时间表示法:
a、每个时间位都应该使用其取值范围内的值。
b、某时间位上的*表示对应位的所有有效取值。
c、- 表示连续的相邻时间点的取值。
例:
30-35 7 * * * /bin/echo "hello"
表示每天7点30分~7点35分执行一次echo "hello"任务
d、, 表示离散的时间点取值
例:
5,35 * * * * /bin/echo "hello"
表示每小时第5分,第35分执行一次echo "hello"任务。
e、/# 表示在指定时间范围内每隔#分钟执行一次任务
例:
5-45/3 * * * * /bin/echo "hello"
表示每小时的5分~45分内,每隔三分钟执行一次echo "hello"任务。
0 */2 * * * /bin/echo "hello"
表示在每天的0分开始,每隔两小时执行一次echo "hello"任务
④每次任务执行后的结果都会发送去MAILTO指定的用户邮箱中去
⑤注意:可以通过输出重定向或者指定MIALTO为空而拒收邮件
例:
0 */2 * * * /bin/echo "hello" &> /dev/null
或者指定MAILTO指定为空拒收邮件
# crontab -e
MAILTO=""
保存退出
(2)用户cron
①使用crontab命令实现
选项:
-l:查看自己的cron任务列表
# crontab -l
-e:通过EDITOR变量中定义的编辑器,打开用户自己的cron配置文件
编辑单独的任务都使用-e选项,无论删除,修改还是新建
例:
# crontab -e
*/3 * * * * /bin/echo "Hello."
-r:移除crontab文件
# crontab -r
(3)如果是管理员
①可以使用命令:crontab -e -u UserName
为别的用户配置cron作业
②例:
# crontab -e -u hadoop
*/3 * * * * /bin/echo "hello"
保存退出
(4)提醒:如果在crontab -e命令下编辑命令时使用%,得转义\%
例:
# crontab -e
5 * * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt
保存退出
或者在使用单引号括起使用%的部分,%可以不用转义
例:
# crontab -e
5 * * * * /bin/touch ~/testfile_`date +'%Y-%m-%d'`.txt
(6)如何使用秒级别任务
①如果只使用该格式
# crontab -e
*/21 * * * * /bin/echo "how are you?"
每分钟每隔21秒执行一次echo “hello”任务,但是,最后的21并不是完全相隔了21秒,而是18秒,有所误差。
②可以使用下列格式解决上述问题:
# crontab -e
* * * * * fori in {0..4};do /bin/echo "how are you?";sleep 21;done
或者
*/21 * * * * while true;do /bin/echo "how are you";sleep 21;done
③建议以秒级别任务用脚本实现
3、anacron
(1)最小刻度是天。在/etc/anacron文件下配置。
(2)anacron是crontab的补充,用于检查crontab中某任务在过去一个周期内是否没有执行,如果没有执行,则在开机以后的某时间点让其执行一次,无论周期是否到达。
三、重点总结:
1、at命令的使用
2、crontab命令的使用
3、crontab中的时间表示法:
4、crontab中的PATH环境变量
5、在时间表示法中,从左到右的*号为低到高
则如果高级的*号有值,低级的*号一定要有具体值。
例:
0 3-18/3 * * * /bin/echo "Hello"
其中0那个时间位必须要有!!!
(责任编辑:IT)
一、Linux任务计划 1、一次性任务计划执行: (1)at (2)batch 2、周期性任务执行: (1)crontab (2)anacron 二、一次性任务执行 1、at命令: 分类: (1)交互式:让用户在at>提示符下输入多个要执行的命令 (2)批处理:将任务的个命令写入文件由at进行调用 2、at交互式处理常用格式: at TIME (1)在at>下输入命令即可 (2)按Ctrl+D可提交任务(作业) (3)例: # at 3:44 at> cat /etc/fstab 按Ctrl+D at><EOF> 3、查看任务命令 (1)格式:at -l (2)命令atq也可以实现查看任务队列 (3)例: # at -l 11 2016-11-04 02:55 a root 任务号 时间 队列字母 发起任务者 4、添加任务队列 (1)格式:at -q 字母 TIME (2)例: # at -q a 03:55 # at> cat /root/hh.sh # at -l 5、删除一个尚未执行的作业 (1)格式:at -d job_num (2)或者用atrm命令:atrm job_num (3)例: # at -l 先查看 # at -d 14 # at -l 检查 或者 # atrm 14 # at -l 6、at批处理常用格式: (1)at -f /PATH/TO/FILE TIME (2)例: # vim /root/at.txt cat /etc/fstab ls 保存退出 # at -f /root/at.txt 4:50 # at -l 检查 7、TIME的指定方式 (1)模糊时间: ①now ②noon(中午12点) ③midnight(晚上12点) ④teatime(下午4点) ⑤tomorrow (2)例: # at now+3min 可制定3分钟后的作业 # at -q a noon 可指定任务队列为a,中午的作业。 # at -f /root/at.txt now+1day 可指定从现在开始后的一天执行批处理任务 # at -f /root/at.txt now+2days 可指定从现在开始后的两天执行批处理任务 (3)TIME的指定十分灵活,具体可参照man手册。 8、任务的执行结果会通过邮件的方式发送给任务提交者 (1)使用mail命令:交互模式查看处理接收邮件 (2)交互模式发送邮件 ①指定发送主题:mail -s “suject” 接收者 ②可用输入重定向指定发送内容:< /path/to/somefile 例: ③可通过管道来提交邮件内容: 例: # echo -e "Hello\nking" | mail -s "hello,buddy" root 9、batch命令 (1)特点:与at不同的是,不能指定时间:它自动选择系统空闲时间执行。 10、文件/etc/at.deny 为at命令作业控制列表(黑名单),可以定义谁能使用at命令,谁不能使用。 (1)写入用户名,该用户就不能使用at命令 (2)例: # vim /etc/at.deny hadoop 保存退出 # su - hadoop $ at 14:30 显示结果: You do not have permission to use at. 二、周期性任务计划(默认以分钟为最小单位) 1、cron (1)crond:守护进程,运行在后台,随时监视着进程,等待执行。 服务进程的工作方式:阻塞、轮询 2、cron分类 (1)系统cron ①系统cron的配置文件在/etc/crontab。 ②文件内容 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # 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 ③上述文件内容中的时间表示法: a、每个时间位都应该使用其取值范围内的值。 b、某时间位上的*表示对应位的所有有效取值。 c、- 表示连续的相邻时间点的取值。 例: 30-35 7 * * * /bin/echo "hello" 表示每天7点30分~7点35分执行一次echo "hello"任务 d、, 表示离散的时间点取值 例: 5,35 * * * * /bin/echo "hello" 表示每小时第5分,第35分执行一次echo "hello"任务。 e、/# 表示在指定时间范围内每隔#分钟执行一次任务 例: 5-45/3 * * * * /bin/echo "hello" 表示每小时的5分~45分内,每隔三分钟执行一次echo "hello"任务。 0 */2 * * * /bin/echo "hello" 表示在每天的0分开始,每隔两小时执行一次echo "hello"任务 ④每次任务执行后的结果都会发送去MAILTO指定的用户邮箱中去 ⑤注意:可以通过输出重定向或者指定MIALTO为空而拒收邮件 例: 0 */2 * * * /bin/echo "hello" &> /dev/null 或者指定MAILTO指定为空拒收邮件 # crontab -e MAILTO="" 保存退出 (2)用户cron ①使用crontab命令实现 选项: -l:查看自己的cron任务列表 # crontab -l -e:通过EDITOR变量中定义的编辑器,打开用户自己的cron配置文件 编辑单独的任务都使用-e选项,无论删除,修改还是新建 例: # crontab -e */3 * * * * /bin/echo "Hello." -r:移除crontab文件 # crontab -r (3)如果是管理员 ①可以使用命令:crontab -e -u UserName 为别的用户配置cron作业 ②例: # crontab -e -u hadoop */3 * * * * /bin/echo "hello" 保存退出 (4)提醒:如果在crontab -e命令下编辑命令时使用%,得转义\% 例: # crontab -e 5 * * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt 保存退出 或者在使用单引号括起使用%的部分,%可以不用转义 例: # crontab -e 5 * * * * /bin/touch ~/testfile_`date +'%Y-%m-%d'`.txt (6)如何使用秒级别任务 ①如果只使用该格式 # crontab -e */21 * * * * /bin/echo "how are you?" 每分钟每隔21秒执行一次echo “hello”任务,但是,最后的21并不是完全相隔了21秒,而是18秒,有所误差。 ②可以使用下列格式解决上述问题: # crontab -e * * * * * fori in {0..4};do /bin/echo "how are you?";sleep 21;done 或者 */21 * * * * while true;do /bin/echo "how are you";sleep 21;done ③建议以秒级别任务用脚本实现 3、anacron (1)最小刻度是天。在/etc/anacron文件下配置。 (2)anacron是crontab的补充,用于检查crontab中某任务在过去一个周期内是否没有执行,如果没有执行,则在开机以后的某时间点让其执行一次,无论周期是否到达。 三、重点总结: 1、at命令的使用 2、crontab命令的使用 3、crontab中的时间表示法: 4、crontab中的PATH环境变量 5、在时间表示法中,从左到右的*号为低到高 则如果高级的*号有值,低级的*号一定要有具体值。 例: 0 3-18/3 * * * /bin/echo "Hello" 其中0那个时间位必须要有!!! (责任编辑:IT) |