計劃任務 為什麼要設置計劃任務 我們在系統的管理中,很多時候不是及時的去操作,比如對某一網站數據的備份,備份的過程需要占用大量的系統資源,凌晨三四點的時候系統訪問用戶最少,系統最空閑。但我們的系統的系統管理員總不能老那個時間爬起來操作吧。 計劃任務的命令 計劃命令分一次性計劃和周期性計劃。at 安排 ...
計劃任務
為什麼要設置計劃任務
我們在系統的管理中,很多時候不是及時的去操作,比如對某一網站數據的備份,備份的過程需要占用大量的系統資源,凌晨三四點的時候系統訪問用戶最少,系統最空閑。但我們的系統的系統管理員總不能老那個時間爬起來操作吧。
計劃任務的命令
計劃命令分一次性計劃和周期性計劃。
at 安排作業在某一時刻執行一次
batch 安排作業在系統負載不重時執行一次
cron 安排周期性運行的作業
一次性計劃at和batch
at命令
刪除at計劃任務
at -d
查看at計劃任務
ls /var/spool/at/
batch命令
作用:
安排一個或多個命令在系統負載較輕進運行一次(一般情況下負載較輕指平均負載降到0.8以下)
使用方法同at
周期性計劃命令crontab
作用:用於生成cron進程所需要的crontab文件
crontab命令:
crontab[-u user] [-l | -r | -e] [-i]
-l: 列出所有任務;
-e: 編輯任務;
-r: 移除所有任務;
-i:同-r一同使用,以互動式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務
crontab命令定義,每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME
註意:運行結果的標準輸出和錯誤以郵件通知給相關用戶
centos7 # systemctl status atd crond開機時需啟動服務
systemctl enable atd crond 重啟還是啟動的
centos6 # service crond atd start開機時需啟動服務
chkconfig --list atd crond開機啟動確保為on狀態
/var/spool/cron/ :存放用戶的任務計劃
/etc/cron.{allow,deny} :控制用戶創建任務計劃黑白名單,同at原理一樣
/var/log/cron :日誌文件
/etc/cron.hourly/ :每小時執行的腳本
/etc/cron.daily/ :每天執行的腳本
/etc/cron.weekly/ :每周執行的腳本
/etc/cron.monthly/ :每個月執行腳本
[root@rhel6 ~]# cat /etc/crontab #配置文件 SHELL=/bin/bash #執行任務命令的shell類型 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
時間通配表示:
- *:對應時間的所有有效取值,每
- ,:離散時間點,和
- -:連續時間點,到
- /:對應取值範圍內多久一次,每隔
@reboot :系統啟動後執行 @yearly 0 0 1 1 * :每年的1月1號00:00執行一次任務 @annually 0 0 1 1 * :每年的1月1號00:00執行一次任務 @monthly 0 0 1 * * :每月的1號00:00執行一次任務 @weekly 0 0 * * 0 :每周日的00:00執行一次任務 @daily 0 0 * * * :每天的00:00執行一次任務 @hourly 0 * * * * :每小時執行一次任務
對於cron任務來講,%有特殊用途;如果在命令中要使用%,則需要轉義;不過,如果把%放置於單引號中,也可以不用轉義
思考:如何在秒級別運行任務?
由於crontab最小時間單位為分鐘,所以我們需要借用sleep命令使其“睡一會”,來實現秒級別,及不能整除時間單位的計劃任務。
sleep命令:
sleep NUMBER [SUFFIX]...
SUFFIX:
s: 秒, 預設
m: 分
h: 小時
d: 天
如:每20秒執行一次
1 |
<span style= "font-family: 宋體; font-size: 16px" >* * * * * for min in 0 1 2; do ech
|
練習 ①每12小時備份一次/etc目錄至/backups目錄中,保存文件名稱格式為“/etc-yyyy-mm-dd-hh.tar.gz” # crontab -e 0 */12 * * * tar -zcf /backups/etc-`date +\%F-\%H`.tar.gz /etc ②每周2,4,7備份/var/log/secure文件至/logs目錄中,文件名格式為“secure-yyyymmdd”; # crontab -e * * * * 2,4,7 cp -r /var/log/secure /logs/secre-`date +\%F` ③每兩個小時取出當前系統/proc/meminfo文件中以S或M開頭的行信息追加至/tmp/meminfo.txt文件中; # crontab -e 0 */2 * * * grep "^[SM].*"/proc/meminfo >> /tmp/meminfo.txt ④四月的第一個星期日早晨1點59分運行a.sh # crontab -e 59 1 1-7 4 * test `date +\%w` -eq 0 && bash a.sh ⑤工作日時間,每10分鐘執行一次磁碟空間檢查,一旦發現任何分區利用率高於80%,就執行wall警報 # vim /testdir/disk.sh #!/bin/bash a=`df | grep "^/dev/sd" | tr -s ‘ ‘ ‘%‘| cut -d% -f5 | sort -n | tail -1` if [ $a -gt 80 ];then wall "The disk will be full" fi # chmod +x disk.sh # crontab -e */10 * * * 1-5 /testdir/disk.sh