首頁 > 軟體

Linux下計劃任務和標準化工作流程

2020-06-16 17:11:39

1、定時任務和計劃任務:

2、一次性定時任務at(生產中很少使用)

at命令: at [option] TIME
       常用選項:
    -V 顯示版本資訊:
    -l: 列出指定佇列中等待執行的作業;相當於atq
    -d: 刪除指定的作業;相當於atrm
    -c: 檢視具體作業任務
    -f /path/from/somefile:從指定的檔案中讀取任務
    -m:當任務被完成之後,將給使用者傳送郵件,即使沒有標準輸出
 #注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關使用者
 TIME:定義出甚麼時候進行 at 這項任務的時間
  HH:MM [YYYY-mm-dd]
 noon, midnight, teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}
  HH:MM 02:00
#在今日的 HH:MM 進行,若該時刻已過,則明天此時執行任務
 HH:MM YYYY-MM-DD 02:00 2016-09-20
#規定在某年某月的某一天的特殊時刻進行該項任務
 HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
#在某個時間點再加幾個時間後才進行該項任務
now + 5 minutes
02pm + 3 days 
執行方式:
1)互動式 2)輸入重定向 3) at –f 檔案
   依賴與atd服務,需要啟動才能實現at任務
at佇列存放在/var/spool/at目錄中
   /etc/at.{allow,deny}控制使用者是否能執行at任務
白名單: /etc/at.allow 預設不存在,只有該檔案中的使用者才能執行at命令
黑名單: /etc/at.deny 預設存在,拒絕該檔案中使用者執行
at命令, 而沒有在at.deny 檔案中的使用者則可執行
如果兩個檔案都不存在,只有 root 可以執行 at 命令

3、執行關機未能執行的計劃任務:anacron

執行計算機關機時cron不執行的任務, CentOS6以後版本取消anacron服務,
由crond服務管理
   對筆記型電腦、桌上型電腦、工作站、偶爾要關機的伺服器及其它不一直開機
的系統很重要對很有用
   組態檔: /etc/anacrontab,負責執行/etc/ cron.daily
/etc/cron.weekly /etc/cron.monthly中系統任務。
 欄位1:如果在這些日子裡沒有執行這些任務……
 欄位2:在重新引導後等待這麼多分鐘後執行它
 欄位3:任務識別器,在紀錄檔檔案中標識
 欄位4:要執行的任務
   /etc/cron.hourly/0anacron執行
   當執行任務時,更新/var/spool/anacron/cron.daily 檔案的時間戳 
CentOS6使用/etc/cron.daily/tmpwatch定時清除臨時檔案
   CentOS7使用systemd-tmpfiles-setup服務實現
組態檔:
   /etc/tmpfiles.d/*.conf
   /run/tmpfiles.d/*.conf
   /usr/lib/tmpfiles/*.conf
   /usr/lib/tmpfiles.d/tmp.conf
   /tmp 1777 root root 10d
   /var/tmp 1777 root root 30d
命令:
  systemd-tmpfiles –clean|remove|create configfile

4、計劃任務crontab(生產中重點)

crontab命令:
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任務;
-e: 編輯任務;
-r: 移除所有任務;
-i:同-r一同使用,以互動式模式移除指定任務
-u user: 僅root可執行,指定使用者管理cron任務
控制使用者執行計劃任務:
   /etc/cron.{allow,deny}
使用者cron
   crontab命令定義,每個使用者都有專用的cron任務檔案:
/var/spool/cron/USERNAME

crontab -e

# 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
 
特殊字元                         作用
   * 表示任何每一個,Ex:* * * * *表示的就是每一min
   - 表示一個範圍,Ex:5-10 * * * * *表示第5到10分每min
   , 分割多個,Ex:5,6,7,10 * * *表示第5,6,7,10分四個時間點
   /n 表示每隔n個時間 Ex:*/4 * * * * 表示每隔4min

Ex:

* 23,00-07/1 * * * /usr/local/bin/apache/bin/apachectl graceful

 這裡很容易理解成為23-第二天7天每隔一小時重新啟動一次apache服務。

由於秒的位置是*,實際結果是23-第二天7點每分鐘重新啟動一次apache服務。

正確的應該給分鐘賦固定值

01 23,00-07/1 * * * /usr/local/bin/apache/bin/apachectl graceful

星期最好和日期不要同時用

1、日月為* *時候,只是星期生效,這時候取得時交集

2、日月有值的時候,日期和星期同時生效,取並集

01 05 28 * 6,7 /bin/bash /cron_scripts/backup_etc.sh >/dev/null 2>&1

備份指令碼會在週六週日或者每月28號,凌晨5點1分執行

5、crontab標準化工作流程

 1、計劃任務指令碼指定存放位置,便於維護和定期備份

 2、寫定時任務前必須在前面寫註釋,包括以下:

  新增計劃任務的人,新增任務的時間,任務有效期,計劃任務指令碼的物件,指令碼的作用,以及其他需要提醒其他注意的事項

 3、執行的指令碼前加上/bin/bash或者/bin/sh,指令碼必須使用完整的絕對路徑

 4、定時任務,需要盡量避免標準輸出和標準錯誤輸出 結尾加上 >/dev/null 2>&1

   計劃任務的標準輸出和標準錯誤輸出都會給root使用者以郵件,很容易撐滿磁碟消耗磁碟inode

 5、能用命令完成的也要寫在指令碼裡

 6、在指定使用者下執行相關的定時任務

 7、制定標準的書寫規範

其他使用注意:

 環境變數問題:計劃文物的指令碼得環境變數需要在指令碼重新定義,可以手動在指令碼內載入環境變數的組態檔如

. /etc/profile。

 時間變數的%需要跳脫

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-07/145371.htm


IT145.com E-mail:sddin#qq.com