定时任务

 

 


+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
张贺,多年互联网行业工做经验,担任过网络工程师、系统集成工程师、LINUX系统运维工程师
我的网站:www.zhanghehe.cn
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-nginx


定时任务

一、计划任务基本概述

什么是crond?shell

crond服务就是用来执行计划任务的服务,类型于闹钟,定点执行。vim

为何用crondbash

作周期性的任务,减小人力成本,好比凌晨三点备份数据,12点打开抢购入口等。网络

计划任务为分两种:运维

系统级别的定时任务:无需人工干预,做用是用于文件的清理、日志的切割、系统信息的采集。ide

用户级别的定时任务:运维人员进行定义。网站

二、格式(分、时、日、月、周)

/etc/crontab文件里面记载了定时任务书写的格式,格式就是:分、时、日、月、周this

* 表示每,默认每一位上都是*,好比* * * * *就表示每一分钟。
- 表示范围,好比0 5-7 * * *表示5点到7点这个时间段
,逗号表示分隔时间段,好比,3,6,9 * * * *表示每小时的第3分种、第6分种、第9分钟
/1,表示每隔多少时间,若是*/10表示每隔10分钟。
1 1 * * 6 每周6的1点1分

6 7 * * * 天天的七点六分

6 7 8 * * 每个月的8日7时6分

6 7 * * 5 这是每周5的7点6分

//当日和周同时出现时,就是而且的关系
6 7 3 * 5 每个月的三号并且还得是周五的7点6分

30-35 7 * * *天天的7点30、31、32、33、34、35各执行一次

5,35 * * * * 每一个小时的第5分和35分都执行一次任务

5,35/3 * * * * 每一个小时的5分到第35分,每隔分隔3分钟执行一次

0  *\2  * * * 每两个小时执行一次

00 02 * * * 天天的2点整执行

00 02 1 * * 每个月的1号2点整执行

00 02 14 2 *  表示2月14号2点整执行

00 02 * * 7  表示周日的2点整执行

00 02 * 6 5  表示6月的周五2点执行

00 02 14 * 7 表示每个月的14号或者周日的2点执行

00 02 14 2 7 表示每一年2月14号或每一年2月的周末2点执行

15 21 * * 1-5 周一到周月的21:15执行

0 23-7/1 * * * 从凌晨23点到早上7点每隔1小时执行一次

3,15 8-11 */2 * * 每隔2天,8点到11点之间的第3分钟和第15分钟执行

45 4 1-10 * *  每个月的1号到10号4点45执行

NOTE:“日”并非比周小,因此在设置“周”的时候“日”并不用有所体现。调试

注意事项:

给定时任务加注释

将须要按期执行的任务写入shell脚本中,避免直接使用命令没法执行的状况。

定时任务的结尾必定要有&>/dev/null 。

若是必定要用命令,命令必须使用绝对路径。

crond如何备份?

经过查看/var/log/cron中执行的记录,去推算任务执行的时间

定时的备份/var/spool/cron/{username}

crond如何拒绝某个用户使用

[root@nginx ~]# echo "zhanghe" >> /etc/cron.deny 
[root@nginx ~]# useradd zhanghe
[root@nginx ~]# su - zhanghe
[zhanghe@nginx ~]$ crontab -e
You (zhanghe) are not allowed to use this program (crontab)
See crontab(1) for more information

计划任务调度的注意点

先调整成每分钟执行,看看效果

经过查看/var/log/cron日志,能够看到执行的结果,方便后续的调试。

注意环境变量的问题

命令先在终端试一试,试成功了再复制到脚本当中,尽可能少用手打。

三、计划任务编写实践

经过crontab编写cron定时任务

参数 含义
-e 编辑
-l 查看

例0:天天凌晨3点作一次备份,备份/etc/目录到/backup下面

将备份命令写入到一个脚本中,天天备份文件名要求格式:当前时时间_文件名_tar.gz,不输出任何信息,存放的备分内容只存放三天的数据

[root@nginx scripts]# vim backup.sh
#!/bin/bash
tar -czf /backup/$(date +%F)_etc_tar.gz /etc/  &>/dev/null
find /backup -name *.tar.gz -mtime +3 | xargs rm -f

[root@nginx ~]# chmod +x /server/scripts/backup.sh 

root@nginx ~]# crontab -e
0 3 * * * /bin/bash /backup/backup.sh

例1:每4个小时备份一次/etc/目录到/bakup目录当中,保存的文件名格式为“etc-yyyy-mm-dd-hh.tar.xz”

0    */4  * * *  /bin/tar -Jcf  /badkup/etc-`/bin/date +%F-%H`.tar.xz  /etc/*

例2:每周2,4,7备份/var/log/messages文件至至/backup目录中,文件名形如”messages-yyyymmdd.tar,gz”

0 0 ** 2,4 ,7  /bin/tar -zcf /backup/messages-`date +\%Y\%m\%d`.tar.gz  /var/log/messages

例3:每两个小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

0 */2 * * *  /bin/grep "^[SM]" /proc/meminfo >> /tmp/meminfo.txt

例4:工做日时间内,每小时执行一次ip addr show 命令

0  */1 * *  1-5  /sbin/ip addr show

例5:每3分钟执行一个echo how are you?

*/3  * * * * /bin/echo “how are you?”           #必须是绝对路径

例6:每周2,4,6备份/etc/目录到backup目录中,备份的文件名的当etc_开头并跟上当日的日期文件名

0 0 * * 2,4,6  tar –jcf /backup/etc_`date +’%F`.tar.xz   /etc/*  #比周二小的都要有值,天并不比周二小

例7: 天天的6,9,12,15,18时查看一下当前系统挂载的文件系统,并将查看结果追加到/tmp/mounts.txt文件

0  6,9,12,15,18  * * * /bin/mount >>/tmp/mounts.txt

例8: 天天每两个小时取当前系统内存空间余量,将其保存到/stats/memory.txt文件下

0 */2 *** /bin/grep “^MemFree” >> /stats/memory.txt

四、秒级任务

怎样使用crond运行秒级任务,想要在crond当中运行秒级任务的话,必需结果其余的方法,好比for循环和while循环.

例1:每20秒打印hello!

***** for i in {0,1,2};do  /bin/echo “hello!”; sleep  20 ;done

这就表明每分钟,一分钟到了以后i就等于0,而后就运行echo hello!运行完成以后就睡20秒,20秒睡完了,i又等于1了,而后再打印,而后再睡20秒,而后i等于3,再打印,再睡着.............从而实现每隔20秒打印一次的效果。

例2;每秒打印一次hello!

***** for i in {1..60};do  /bin/echo “hello!”; sleep  1 ;done

解释:一分种到了以后,i先等于1以后就echo,而后睡一秒,i又等于2了,再echo ...............,一分种有60个一秒。

相关文章
相关标签/搜索