計劃任務

爲何要設置計劃任務

  咱們在系統的管理中,不少時候不是及時的去操做,好比對某一網站數據的備份,備份的過程須要佔用大量的系統資源,凌晨三四點的時候系統訪問用戶最少,系統最空閒。但咱們的系統的系統管理員總不能老那個時間爬起來操做吧。shell

計劃任務的命令

  計劃命令分一次性計劃週期性計劃
at    安排做業在某一時刻執行一次
batch 安排做業在系統負載不重時執行一次
cron 安排週期性運行的做業vim

一次性計劃at和batchcentos

at命令

刪除at計劃任務
 at -dbash

查看at計劃任務
ls /var/spool/at/網站

batch命令

做用:
  安排一個或多個命令在系統負載較輕進運行一次(通常狀況下負載較輕指平均負載降到0.8如下)url

使用方法同atcentos7

週期性計劃命令crontab

  做用:用於生成cron進程所須要的crontab文件spa

crontab命令:日誌

crontab[-u user] [-l | -r | -e] [-i]code

-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秒執行一次

* * * * *  for min in 0 1 2; do echo "hi"; sleep 20 ; 
done實現每秒執行
#vim test.sh
#!/bin/bash
while true ;do
sleep 1
echo "hello"
done
#crontab –e
* * * * *   /root/test.sh >> /data/mail
#cat /data/mail
練習 ①每12小時備份一次/etc目錄至/backups目錄中,保存文件名稱格式爲「/etc-yyyy-mm-dd-hh.tar.gz」 # crontab -e 0 */12 * * * tar -zcf  /etc-`date +\%F-\%H`.tar.gz  /backups ②每週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
相關文章
相關標籤/搜索