Linux系統計劃任務

在生活、生產環境中,我們可能遇到這樣的場景,想在某個時刻,或者固定某個時間周期的在Linux系統中執行某項任務,例如,定時關機,定期自動清理垃圾文件等,at,crontab等命令就是幫你實現這樣功能的。

本節索引:

一、同步服務器時間

二、執行一次性計劃任務—— ? at

三、執行周期性計劃任務—— crond

0037037011239850_b

 

在生活、生產環境中,我們可能遇到這樣的場景,想在某個時刻,或者固定某個時間周期的在Linux系統中

執行某項任務,例如,定時關機,定期自動清理垃圾文件等,at,crontab等命令就是幫你實現這樣功能

的。

 

一、同步服務器時間

在進行計劃任務之前,一定要確保服務器的時間是準確無誤的,否則將造成計劃任務失敗或者無法達到

預期效果,尤其是在大規模的集群環境中,更顯得尤為重要,所以我們首先要學會的就是同步服務器時

間。

CentOS6:

ntpdata 172.x.x.x ? ? ? ? ? ? ? ? ? ? ? ? ? ?將時間與服務器同步

vim /etc/ntp.conf ? ? ? ? ? ? ? ? ? ? ? ? ? 修改此文件

server 172.x.x.x iburst ? ? ? ? ? ? ? ? ?加上此行

chkconfig ntpd on ? ? ? ? ? ? ? ? ? ? ? ? ? 下次啟動自動打開ntpd服務

service ntpd start ? ? ? ? ? ? ? ? ? ? ? ? ? 打開ntpd服務

service ntpd status ? ? ? ? ? ? ? ? ? ? ? ?檢查ntpd服務狀態

 

CentOS7:

ntpdata 172.x.x.x ? ? ? ? ? ? ? ? ? ? ? ? ? ?將時間與服務器時間同步

vim /etc/chrony.conf ? ? ? ? ? ? ? ? ? ? 修改此文件

server 172.x.x.x iburst ? ? ? ? ? ? ? ? ? 加上此行

systemctl enable chronyd ? ? ? ? ? ? ?下次啟動自動打開chronyd服務

systemctl start chronyd ? ? ? ? ? ? ? ? 打開chronyd服務

systemctl status chronyd ? ? ? ? ? ? ? 檢查chronyd服務狀態

 

至此,服務器時間同步就算是完成了!

 

二、執行一次性計劃任務——at

Linux任務計劃、周期性任務執行

未來的某時間點執行一次任務

?? at

batch:系統自行選擇空閑時間去執行此處指定的任務

周期性運行某任務

?? cron

 

 

使用at命令前,先確認at服務是否處于運行狀態

Centos6:

確認當前運行級別處于on狀態

run level

chkconfig –list atd

如果服務未開啟,請開啟atd服務

service atd start??????????????

 

centos7:

確認處于active(running)狀態

systemctl status atd

如果服務未開啟,請開啟atd服務

systemctl start atd

 

at

格式:at [options] TIME?? 最后Ctrl+d結束輸出

options:

-l????? 顯示所有計劃任務列表,同atq命令

-d #? 刪除第#個計劃任務,同atrm命令

-c #? 查看具體作用任務

-m??? 強制發郵件

-f /path/from/somefile? 草叢指定文件中讀取任務

TIME:

HH:MM [YYYY-mm-dd]

noon,midnight,teatime (4pm)

tomorrow

now+#{minute,hours,days,weeks}

 

HH:MM? 02:00

? 在今日HH:MM進行,若該時刻已過,則明天此時執行任務

HH:MM YYYY-mm-dd

? 規定在某年某月某一天的某時刻執行任務

HH:MM[am|pm][month][date]

04pm March 17

17:20 tomorrow

HH:MM[am|pm]+number[minutes|hours|days|weeks]

在某個時間點再加幾個時間后才執行任務

now + 5minutes

02pm + 3days

 

注意:計劃任務中的標準輸出不顯示在終端,將會以郵件方式發送至郵箱,所以執行計劃任務最好

將標準輸出全部重定向到/dev/null,否則會產生大量垃圾郵件

 

at執行方式:

方法1:交互式

例:at

at 15:00? 創建一個15:00的計劃任務

poweroff????????????????? 輸入計劃命令

Ctrl+d?????????????? 結束輸出

方法2:輸入重定向

例:at 18:00 << EOF

shutdown

EOF

方法3:at -f 文件

例:echo “hello” > /data/f1

at 19:00 -f /data/f1

 

at任務隊列存放在/var/spool/at目錄中,任務執行后消失。

 

at任務的黑名單(deny)、白名單(allow)文件:

系統默認只有黑名單文件/etc/at.deny,沒有白名單文件/etc/at.allow

/etc/at.deny??? 黑名單文件,放入文件中的用戶將不能執行at任務計劃

/etc/at.allow? 白名單文件,當白名單文件存在時,只有白名單中的用戶才能使用at。

白名單文件需手動創建,優先級高于黑名單

如果黑、白名單文件包含同一用戶,將優先看白名單,可以使用at計劃任務

如果黑、白名單文件都刪除,將只有root賬號可以使用at計劃任務。

 

 

三、執行周期性的計劃任務——crond

使用crond周期任務計劃前,先確認crond服務是否處于運行狀態

Centos6:

確認處于active(running)狀態

service crond status?????????

如果服務未開啟,請開啟crond服務

service crond start????????

 

centos7:

確認處于active(running)狀態

systemctl status crond

如果服務未開啟,請開啟crond服務

systemctl start crond?????

 

相關文件:

/etc/crontab ???????? 系統周期性任務計劃文件(root only)

/var/spool/cron/?? ????? 給用戶創建周期計劃的目錄

/etc/cron.d/ ????????? 給存儲系統創建周期計劃的目錄

 

/var/log/cron????????? 日志文件,可利用日志中的信息恢復誤操作內容

 

注意:

(1)在/etc/crontab/etc/cron.d/的文件中剛創建周期計劃任務時,需要比普通用戶周期計劃目

錄的格式多添加一個用戶名,位于時間和命令之間。

(2)周期計劃任務中的標準輸出不顯示在終端,將會以郵件方式發送至郵箱,所以執行計劃任務建議

將標準輸出全部重定向到/dev/null,否則會產生大量垃圾郵件

 

crontab

格式:

crontab [options] file

crontab [options]

 

options:

-u <user>? ???? 指定一個用戶

-e???????? ? 創建計劃任務

-l???????? ??? 列出計劃任務列表

-r???????? ?? 刪除計劃任務

-i???????? ??? 刪除前進行交互式提示

 

例:

crontab -l -u wang ? ???查看wang用戶的計劃任務

crontab -r -u wang ? ? 刪除wang用戶的計劃任務

 

crontab計劃任務同at命令一樣,也有自己的黑、白名單文件,并且他們的作用是相類似的:

/etc/cron.deny??? 黑名單文件,放入文件中的用戶將不能執行周期任務計劃

/etc/cron.allow????? 白名單文件,只有白名單中的用戶才能使用cron,需手動創建,優先級高于黑名單

如果黑、白名單文件都刪除,將只有root賬號可以使用周期計劃任務。

 

創建周期任務的兩種方法:

第一種方法:修改/etc/crontab? (rootonly)

/etc/crontab 計劃任務參考格式

# 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

*表示每次都執行

*/10表示每10分鐘執行一次

 

例如:

# run five minutes after midnight, every day

每五分鐘執行一次:

5 0 * * *?????? $HOME/bin/daily.job >> $HOME/tmp/out 2>&1

 

# run at 2:15pm on the first of every month — output mailed to paul

每個月第一天的14:15分執行一次,并發送郵件

15 14 1 * *???? $HOME/bin/monthly

 

# run at 10 pm on weekdays, annoy Joe

每個工作日晚上22:00,發送郵件給Joe

0 22 * * 1-5??? mail -s “It’s 10pm” joe%Joe,%%Where are your kids?%

 

每間隔2小時的23分鐘,打印一次,am0:23,am2:23,am4:23…,每天

23 0-23/2 * * * echo “run 23 minutes after midn, 2am, 4am …, everyday”

 

每個星期日的04:05,打印一次

5 4 * * sun???? echo “run at 5 after 4 every sunday”

 

注意:

30 4 1,15 * 5 ????表示每月1,15日加每周五執行,或關系

若想執行且關系,加腳本判斷

 

特殊的時間格式:

這些特殊的時間規范可以用來代替一些時段和日期,用@字符作為前綴

@reboot ??????? Run once after reboot?? 下次啟動會執行,包括poweroff

@yearly ???????? 0 0 1 1 *?????????? 每年執行一次

@annually ???? 0 0 1 1 *?????????? 每年執行一次

@monthly ???? 0 0 1 * *?????????? 每月執行一次

@weekly ?????? 0 0 * * 0?????????? 每周執行一次

@daily ??????????? 0 0 * * *?????????? 每天執行一次

@hourly ???????? 0 * * * *?????????? 每小時執行一次

 

 

 

第二種方法:crontab命令創建

crontab -e?????? 將以vi打開一個空白文件

# 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

# |? |? |? |? |

# *? *? *? *? *?? command to be executed

不需寫用戶名,將以當前用戶執行周期計劃任務

創建成功后周期計劃文件自動放入/var/spool/cron目錄

 

at和crontab對比:

一次性作業使用at

重復性作業使用crontab

at?????????????????????? crontab

創建任務:??? at time????????????????? crontab -e

任務列表:??? at -l ? ? ? ? ? ? ? ? ? ? ? crontab -l

查看信息:??? at -c #??????????????????? N/A

刪除任務:??? at -d #????????????????? crontab -r

修改任務: ? ? N/A ? ? ? ? ? ? ? ? ? ? crontab -e

 

注意:(1)默認不顯示標準輸出和標準錯誤,會以郵件方式郵寄給用戶

a.COMMAND > /dev/null

b.COMMAND &> /dev/null

(2)根用戶能夠修改其他用戶的作業

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97641

(0)
wangxczwangxcz
上一篇 2018-05-06 19:50
下一篇 2018-05-06 20:29

相關推薦

  • Mysql之備份及還原相關實驗

    本節索引 實驗一:冷備份數據庫并還原 實驗二:結合LVM邏輯卷實現幾乎熱備 實驗三:數據庫數據文件損壞后,利用mysqldump還原至最新狀態 實驗四:誤刪除表后,利用mysqldump還原至最新狀態 實驗五:Xtrabackup完全備份及還原 實驗六:Xtrabackup完全,增量備份及還原 實驗七:Xtrabackup單表導出和導入   實驗準…

    2018-06-14
  • 學習筆記(1)

    學習筆記

    Linux筆記 2018-04-01
  • sudu、文件共享(vsftp、samba、nfs)

    sudo:授權之后,能夠讓某用戶以另外一個用戶身份運行命令; 配置文件:/etc/sudoers;其編輯命令visudo sudo操作日志記錄至/var/log/secure中 特別注意:禁止授權修改root密碼;! passwd root,passwd [a-Z]* 配置項: root ALL=(ALL) ALL %wheel ALL=(ALL) ALL …

    Linux筆記 2018-05-30
  • TCP/IP協議

    無線網絡標準 IEEE 802.3 802.11a/b/g/n/ac 物理層,數據鏈路層data link layer   以太網是工作在物理層和數據鏈路層上 單工,雙工(物理層概念) 單工:單向傳輸數據??? (廣播,收音機) 雙工:雙向傳輸數據 全雙工:同時雙向?????? (手機) 半雙工:輪流雙向???? (對講機)   Hub集…

    Linux筆記 2018-06-24
  • 軟raid5制作

    ?一、準備工作 (1)VMware虛擬機 (2)centos6.9系統 二、在centos6.9關機狀態下增加3塊硬盤做RAID5,其中一塊當校驗盤。 三、用遠程終端可以清楚的顯示新增加的硬盤,將新增加的硬盤進行分區   四、開始制作 mdadm -C /dev/md0 -a yes -l 5 -c 32 -n 2 -x1 /dev/sd{b1,c…

    2018-04-29
  • 正則表達式 筆記

    重新復習的筆記

    2018-04-18
欧美性久久久久