学习笔记-Linux任务计划(at,corn)

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中某任务在过去的一个周期内是否没有执行,
如果没有执行,则在开机以后的某时间点让其执行一次,无论其周期是否到达

猜你喜欢

转载自blog.csdn.net/weixin_36209467/article/details/82356552