Linux任务计划
一次性的任务执行:(例如定时关机)
at, batch
周期性任务执行:(例如定期更新病毒库)
crontab
anacron
一次性任务:
at:
交互式:让用户在at>提示符输入多个要执行的命令
批处理:让任务的各命令写入文件有at进行调用
at TIME
at>
Ctrl+d:提交任务
at作业有队列:使用单个字符表示
查看作业:at -l = atq
删除尚未执行的作业:
at -d job_num
atrm job_num
at批模式:
at -f /path/to/at_job_file TIME
TIME:
模糊时间:
now,noon,midnight,teatime,tomorrow
cat /etc/at.deny : 这个文件是at使用黑名单
任务计划的执行结果会通过邮件的方式发送给任务提交者
邮件命令 mail
交互式模式接受邮件:
#mail 打开邮件列表
数字:打开邮件
N:查看未读邮件
quit:退出
mail username : 向username发送邮件
交互式模式发送邮件
-s "Subject"
< /path/to/somefie
bath:与at不同,不能指定时间:它自动选择系统空闲时执行;
周期性任务计划:cron
使用的PATH的和用户指定的PATH不一样:需要自己的定义。默认只有/bin /sbin /usr/bin /usr/sbin下的命令
crond:守护进程
服务进行:阻塞,轮询
系统corn:
文件:/etc/corntab
用户cron:
/var/spool/corn/UserName
/etc/corntab :每行定义一个独立的任务
[root@localhost tmp]# cat /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
6 7 * * * 每个7点6分半
6 7 8 * * 每月8号7点6分半
* 7 8 * * 每月8号 7点 每分钟执行
6 7 * * 5 每周五的7点6分执行
6 7 3 * 5 每周五还得是3月的7点6分执行
30-35 7 * * * 每天的7点30到35执行
5,35 * * * * 每个小时的第5分和35分都执行
5-45/3 * * * * 每个小时的第5分到45分之间每隔3分钟执行一次
0 */2 * * * * 每天的每2小时执行
* * * * * 每分钟执行一次
0 */2 * * * * /bin/echo "hello" &> /dev/null
重定向会拒收邮件,没有重定向会接到邮件
MAILTO="发给空用户。也可以拒收邮件
时间表示法:
1.每个时间位都应该使用其可用的有效值范围的值:
2.某时间位的*表示对应为的所有有效取值
3.-:连续的时间点取值
4、,:离散的时间点取值
5,/# :表示在指定时间范围内每隔#一次
用户cron:
使用crontabl来实现
-l: 查看自己的corn任务列表
-e: 通过EDITOR变量中定义的编译器打开自己的的corn配置文件
编译单独的任务都使用-e,无论是删除,修改,还是新建
-r:移除所有
如果是管理员:
-u UserName:为别的用户配置crontab作业:
# crontab -e -u docker
提醒:如果在crontab的用户命令中使用%,得转义为\%
5 3 * * * /bin/touch ~/testfile_date +\%Y-\%m-\%d
.txt
在使用单引号后,%也可以不转义
5 3 * * * /bin/touch ~/testfile_date +’%Y-%m-%d‘
.txt
比给定时间小的单位(*)要给值,不要用*。确保命令在/bin /sbin /usr/bin /usr/sbin下
练习:
1、每3分钟执行一个“echo “how are you?””
2、每周2、4、6备份/etc/目录至/backup目录中,备份的文件名以当etc_开头并跟上当日的日期作为文件名
3.每天6,9,12,15,18查看一下系统当前挂载的所有文件系统,并将查看的结果追加至/tmp/mounts.txt文件中
4.每天每两小时取当前系统内存空间余量,将其保存至/stats/memory.txt文件中
1.*/3 * * * * /bin/echo “how are you?”
2.0 0 * * 2,4,6 /bin/tar Jcf /back/etc-`date +'%F'`.tar.xz /etc/*
3.0 6-18/3 * * * /bin/mount >> /tmp/mounts.txt
4.20 */2 * * * /bin/grep "^MemFree:" /proc/meminfo >> /stats/memory.txt
如何实现秒级别的任务:
* * * * for i in {0..4};do /bin/echo “how are you?”;sleep10;done
crontab文件的格式
空白行会被忽略
#开头的行是注释
anacron: 是crontab的补充,用于检查crontab中某任务在过去的一个周期内是否没有执行,
如果没有执行,则在开机以后的某时间点让其执行一次,无论其周期是否到达