1. 程式人生 > >Linux基本計劃任務

Linux基本計劃任務

at 計劃任務

在linux下有兩種計劃任務的計劃:只執行一次、周期性執行。


(1)只執行一次,在未來的某個指定時間執行一次
指定的時間格式有:
絕對時間:HH:MM,DD.MM.YY,MM/DD/YY
相對時間:now+數字(minutes,hours,days,weeks)
模糊時間:noon(即12點),midnight(即24點),teatime(即16點)

命令格式:at [選項] [時間]
命令選項:
-m 指定任務完成後,將給用戶發送郵件
-l 與atq命令一樣
-d 與atrm命令一樣
-v 顯示任務將被執行的時間
-c 打印任務內容到標準輸出
-V 顯示版本信息

atd服務必須啟動

rhel6 rhel7
#service atd restart #systemctl restart atd.service

1、2分鐘後向/tmp/1.txt輸入當前時間,

[root@rhel7-01 ~]# at now+2minutes #回車
at> echo `date` >> /tmp/1.txt #回車
at> <EOT>  #寫入完命令後按下crtl+d提交任務
job 3 at Thu Mar  8 15:44:00 2018
[root@rhel7-01 ~]# tail -f /tmp/1.txt 
2018年 03月 08日 星期四 15:44:00 CST

2、查看當前at的任務,at -l

[root@rhel7-01 ~]# at now+5minutes
at> echo `date` >> /tmp/1.txt
at> <EOT>
job 4 at Thu Mar  8 15:52:00 2018
[root@rhel7-01 ~]# at -l
4   Thu Mar  8 15:52:00 2018 a root
[root@rhel7-01 ~]#

3、刪除任務,at -d jobID 或者 atrm jobID

[root@rhel7-01 ~]# at now+5minutes
at> echo `date` >> /tmp/1.txt
at> <EOT>
job 5 at Thu Mar  8 15:54:00 2018
[root@rhel7-01 ~]# at -l
5   Thu Mar  8 15:54:00 2018 a root
[root@rhel7-01 ~]# at -d 5
[root@rhel7-01 ~]# at -l
[root@rhel7-01 ~]# 

4、系統空閑的時候自動執行任務

[root@rhel7-01 ~]# batch
at> echo "hello" > /dev/pts/1     
at> <EOT>
job 6 at Thu Mar  8 15:55:00 2018
[root@rhel7-01 ~]# hello

[root@rhel7-01 ~]#

at有兩個配置文件/etc/at.deny和/etc/at.allow
如果deny單獨存在,則是deny文件記錄以外的所有用戶都可以使用at命令
如果allow單獨存在,則是只允許allow內的用戶可以使用at命令
如果同時存在,則只允許allow內的用戶使用at命令


(2)周期性執行任務
可周期性的在指定時間裏重復執行任務

命令格式:crontab [選項] [參數]
命令選項:
-u 指定設置某用戶的計劃任務,只有root可以設置
-l 列出用戶的計劃任務
-r 刪除某用戶的所有計劃任務
-e 編輯某用戶的所有計劃任務


時間格式說明:
技術分享圖片
第一個位置表示:分鐘(0-59)
第二個位置表示:小時(0-23)
第三個位置表示:日期(1-31)
第四個位置表示:月份(1-12)
第五個位置表示:星期(0-7,0和7均代表星期日)
第六個位置表示:所要執行的命令

時間通配表示:
* 代表當前位置的所有時間點
5 * * * * 每天每小時的05分開始執行
, 離散時間點
10,25,50 * * * * 每天每小時的10分、25分、50分各執行一次
- 連續時間點
30-40 * * * * 每天每小時的30-40分鐘之間,每一分鐘執行一次
/ 對應取值範圍內每隔多少時間執行一次
1 */2 * * * 每隔兩小時的01分執行一次


crond任務分為用戶計劃和系統計劃
1、系統計劃的配置文件在/etc/crontab文件裏
技術分享圖片
2、用戶計劃在/var/spool/cron/username


crontab權限問題到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:
1、如果兩個文件都不存在,則只有root用戶才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,則只有列在cron.allow文件裏的用戶才能使用crontab命令,如果root用戶也不在裏面,則root用戶也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,則只有列在cron.deny文件裏面的用戶不能使用crontab命令,其它用戶都能使用。
4、如果兩個文件都存在,則列在cron.allow文件中而且沒有列在cron.deny中的用戶可以使用crontab,如果兩個文件中都有同一個用戶,以cron.allow文件裏面是否有該用戶為準,如果cron.allow中有該用戶,則可以使用crontab命令。


crond服務必須啟動
rhel6 rhel7
#service crond restart #systemctl restart crond

示例:

  1. 每小時的09分執行一次
    9 * * * *
  2. 每周3至6的10點、23點分別執行一次
    0 10,23 * * 3-6 或者 0 10,23 * * 3,4,5,6
  3. 每小時的10-30分之間每隔2分鐘執行一次
    10-30/2 * * * *
  4. 每天12點09分執行一次
    9 12 * * *
  5. 每周3的12點09分執行一次
    9 12 * * 3
  6. 每月9號12點09分執行一次
    9 12 9 * *
  7. 每年的6、12月的9號12點09分分別執行一次
    9 12 9 6,12 *

思考題

  1. * */2 * * *,代表什麽意思?
  2. 0 12 9 * 6,代表什麽意思?

答案

  1. 每隔一小時,每分鐘執行一次
  2. 每月9號且是周六的時候,12點正執行一次(一般比較少日與周同時使用,因為要同時滿足條件的概率較低。)

Linux基本計劃任務