作为系统运维人员都清楚,在Linux下定义重复性的任务,我们一般会采用crontab来进行:crontab这个指令所设置的工作将会循环的一直进行下去!可循环的时间为分钟、小时、每日、每月、每周。
crontab计划任务:
1)常见用法:
crontab命令的作用和用法如下:
描述:为每个用户维护周期性的计划任务文件
用法:crontab [-u 用户][-l|-r|-e]
-u <user> 指定某个用户的计划任务(只有root用户才有这个权限)
-e 编辑用户的计划任务
-l 列出用户的计划任务
-r 删除用户的计划任务
-i 删除时进行交互式操作
用户的cron计划任务文件格式含义如下:
* * * * * 指令
分 时 日 月 周 指令
0-59 0-24 1-31 1-12 0-7
如果需要指定时间段:
a:可以使用横杠(-)表示一段连续的时间
b:使用逗号(,)表示若个不连续的时间
c:使用星号(*)表示所有的时间,使用除号(/)表示间隔时间
2)crontab的常规用法:
# 列出用户root的计划任务
[root@localhost ~]# crontab -l */30 * * * * ntpdate -u s2m.time.edu.cn >/dev/null 2>&1
# 列出用户wanlong的计划任务
[root@localhost ~]# crontab -l -u wanlong * */5 * * * /usr/bin/ping 127.0.0.1 >/dev/null
# 计划任务的配置文件是保存在/var/spool/cron/下,只要有计划任务的用户都对应有配置文件
[root@localhost ~]# cd /var/spool/cron/ [root@localhost cron]# ls root wanlong [root@localhost cron]# cat wanlong * */5 * * * /usr/bin/ping 127.0.0.1 >/dev/null [root@localhost cron]# cat root */30 * * * * ntpdate -u s2m.time.edu.cn >/dev/null 2>&1 说明:可以发现/var/spool/cron/wanlong与crontab -l -u wanlong显示的结果是一直的,然后我们测试下直接修改配置文件,看计划任务是否生效 [root@localhost cron]# echo "* */2 * * * /usr/bin/ping 127.0.0.1 >/dev/null" >>/var/spool/cron/root [root@localhost cron]# crontab -l */30 * * * * ntpdate -u s2m.time.edu.cn >/dev/null 2>&1 * */2 * * * /usr/bin/ping 127.0.0.1 >/dev/null 说明:以上可知,直接修改配置文件,仍旧生效。
3)如何实现秒级别crontab
方法1:使用sleep加间隔时间的模式
# crontab -l * * * * * for min in 0 1 2;do echo "hi";sleep 20;done
方法2:转换成脚本进行
#!/bin/bash #created by molewan while: do /test.sh sleep 7 done # chmod 755 seconds.sh # nohup bash seconds.sh &
补充知识:
sleep用法格式:
sleep NUMBER[SUFFIX]
SUFFIX值可以为s(秒,默认值)、m(分钟)、h(小时)、d(天数)
4)计划任务如何每7分钟运行(分钟取值范围0-59)
不能被60整除的,不能精确做到真正运行
错误做法: */7 * * * *
推荐的方法:
#!/bin/bash #created by molewan while: do /test.sh sleep 7 done
5)练习:
1、每4小时备份一次/etc目录至/backup目录中,保存文件名称格式为“etc-yyyy-mm-dd-HH.tar.xz”
# crontab -l * */4 * * * tar -cJPf /backup/etc-$(date +%F-%k).tar.xz /etc >/dev/null 2>&1
2、每周2,4,7备份/var/log/messages文件至/logs目录中,文件名为“messages-yyyymmdd”;
# crontab -l * * * * 2,4,7 tar -cf /logs/messages-$(date +%y%m%d)
3、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加/tmp/meminfo.txt文件中
[root@zabbix ~]# egrep -i "^(S|M)" /proc/meminfoMem Total: 5947112 kB MemFree: 1669468 kB MemAvailable: 2726264 kB SwapCached: 116600 kB Mlocked: 0 kB SwapTotal: 4194300 kB SwapFree: 3288708 kB Mapped: 117324 kB Shmem: 285240 kB Slab: 188640 kB SReclaimable: 133080 kB SUnreclaim: 55560 kB # crontab -l * */2 * * * egrep -i "^(S|M)" /proc/meminfo>>/tmp/meminfo.txt
4、工作日时间内,每小时执行一次“ip addr show”
* */1 * * 1-5 /usr/sbin/ip addr show
6)其它注意事项:
a、在 Linux 下面的 crontab 会自动的帮我们每分钟重新读取一次 /etc/crontab 的例行工作事项;
b、但是某些原因或者是其他的 Unix 系统中, 由于 crontab 是读到内存当中的,所以在你修改完 /etc/crontab 之后,可能并不会马上执行,这个时候请重新启动crond服务 ;
c、周与日月的计划任务不可同时并存
重启crond服务:
CentOS7下重启crond服务 [root@zabbix ~]# systemctl restart crond.service [root@zabbix ~]# echo $?0 执行前先看下,是否有计划任务正在执行 CentOS6下重启crond服务 [root@Openstack-01 ~]# /etc/init.d/crond restart [root@Openstack-01 ~]# echo $?0
原创文章,作者:Net21-冰冻vs西瓜,如若转载,请注明出处:http://www.178linux.com/25107
评论列表(1条)
写的很好,排版还可以在漂亮一点,crontab有些地方写的不对,加油