2021-05-12 14:32:11
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
d
/tmp
1777 root root 10d
d
/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
相關文章