作為系統運維人員都清楚,在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.www58058.com/25107
寫的很好,排版還可以在漂亮一點,crontab有些地方寫的不對,加油