例行工作排程 crontab

2021-06-16 09:17:03 字數 2973 閱讀 5562

例行工作,有點類似上班打卡,等等迴圈的工作

linux 工作排程的種類, at , cron

一種是例行性的,就是每隔一定的週期要來辦的事項   crontab

一種是突發性的,就是這次做完以後就沒有的那一種   at  ( 要想執行,必須啟動 atd 服務, 啟動辦法 /etc/init.d/atd restart ( chkconfig atd on 設定每次開機自動啟動 )

at

我們使用 at 這個指令來產生所要運作的工作,並將這個工作以文字檔案的方式寫入 /var/spool/at 目錄內,該工作便能等待 atd 這個服務取用與執行了

/etc/at.allow 與 /etc/at.deny 這兩個檔案來限制使用者是否可以使用 at ( 如果這兩個檔案都不存在,那麼只有 root 可以使用 at 這個指令,先檢查at.allow,再檢查at.deny

at [-mldv] time   at -c 工作號碼

-m : 當at 完成之後,及時沒有輸出資訊,以 email通知使用者該工作已完成 ( 如果沒有資訊輸出,就不傳送郵件,如果沒有指定 -m 引數 )

-l : at -l 相當於 atq , 列出目前系統的所有 at 排程

-d : at -d 相當於 atrm , 可以取消乙個 at 排程的工作

-v : 可以使用比較明顯的事件格式欄出  at 排程中的工作列表

-c : 可以列出後面接的該項工作的實際指令內容

時間格式: hh:mm  (或 hh:mm yyyy-mm-dd )   例如: 04:00 2009-03-17 或 now + 5 minutes  或 04pm + 3 days

at now + 5 minutes 進入 at >         // 這種 now + 時間的方式比較好

at > /bin/mail root-s "testing a job" < /root/.bashrc

at > 這裡輸入 ctrl + d 就會出現 eof 的字樣

at -c 4

at 另乙個很棒的優點是,背景執行

離線繼續工作的任務,比如大型的程式,需要執行很久,比如跑3天,如果是用windows連線的linux,如果連線中斷,那麼這個程式也會中斷,因為它所依賴的shell被中斷了,

而如果有了 at, 就可以讓這個程式在背景下工作,而不依賴於終端機

at 執行與所有的終端機環境無關,而所有 standard output/standard error output 都會傳送到執行者的 mailbox 去啦,所以終端機當然看不到任何資訊,可以通過 echo "hello" > /dev/tty1來取代,這樣就能顯示在螢幕上了

atq ( 檢視所有的 at )

atrm 5 ( 5 是 job no. ) ( 移除工作5 )

crontab

/etc/cron.allow 和 /etc/cron.deny ( 一般只用乙個就可以了,例如 /etc/cron.deny, 有at中的檔案一樣,如果沒有,就只有root能執行 )

該工作會被記錄到 /var/spool/cron/使用者 中      在工作沒有被執行,準備的時候

cron 執行的每項工作都會記錄到 /var/log/cron 這個登入檔中,因為它是迴圈執行的,所以會有歷史記錄

如果你使用 crontab -e 直接編輯工作可以, 但是如果有多個工作時,每個工作要佔一行,另外如果多個工作時,你如果想刪除其中的乙個, 那麼只能使用

crontab -e 編輯, 把那行刪除, 如果是想把所有的工作全部刪除,那麼使用 crontab -r

crontab [-u username] [-l | -e | -r]

-u : 只有 root 可以,幫助其他使用者 建立/刪除 crontab 工作

-e : 編輯 crontab

-l : 檢視 crontab

-r : 刪除 crontab 工作內容

因為是迴圈指令,所以需要有時間戳,

指令格式如下

分鐘     小時     日期     月份     周        指令

0-59     0-23    1-31     1-12    0-7       指令   ( 周的 0 和 7 都是星期天 )

* 星號 : 代表任何時刻都接受的意思。 比如日,月,週都是* , 那就有可能代表,不論何月,何日,的禮拜幾 該時間都執行

, 逗號 :代表時間斷點, 0 3,6 表示 3點 和 6點 只是這兩個時間點

-減號 :代表時間間隔, 0 3-6 代表 3,4,5,6,都執行

/n 斜線:每個的意思,/5 表示每隔5分鐘

* /5 * * * * 就是每隔5分鐘1次

系統配置檔案 /etc/crontab

只需要編輯 /etc/crontab 這個檔案,就可以做例行事例,有一點需要特別注意, crontab -e 這個就是編輯 /usr/bin/crontab 。系統每分鐘都會讀取一次 /etc/crontab 與 /var/spool/cron 裡邊的資料內容。因此你編輯完 /etc/crontab之後,儲存後,一會就會立刻執行了。

周與日期的時間戳不能共存

可以喚醒停機時間的工作任務

比如你的 linux在晚上要關機,而晚上23點多還有例程工作要做。因為時間錯過了。那不是沒辦法工作了? 引入 anacron 命令

anacron 以天為單位或者是在開機後立刻執行 anacron 動作,執行完後就會自動停止了。

anacron 會以 一天,七天, 乙個月為期去偵測系統未進行的 crontab 任務。

anacron [-sfn] [job]

anacron -u [job]

-s : 強制執行,不判斷時間記錄檔案的時間戳 ( 用來判斷關機時間 )

-n : 立刻進行未執行的任務

-u : 僅更新時間記錄檔案的時間戳,不進行任何工作

job : 由 /etc/anacrontab 定義的各項工作內容

Linux中用crontab例行工作安排

linux中用crontab例行工作安排 1.什麼是crontab?週期性的處理待辦事項的守護程序,類死任務計畫。2.crontab命令解析。示例 0 0 1 5 cd home hiperry shutdwon.sh logs shutdwon.log 2 1 每天晚上十二點執行自定義的關機指令碼...

例行性工作排程 crontab

atd啟動 root study systemctl restart atd 重新啟動 atd 這個服務 root study systemctl enable atd 讓這個服務開機就自動啟動 root study systemctl status atd 查閱一下 atd 目前的狀態 at 的運...

Linux例行性工作排程crontab

什麼是例行性工作?比如太陽每天從東方公升起,學校的上課鈴總是不厭煩的定時響起,老媽的喊叫聲總在每天的固定時刻叫你起床等。這些都是例行性工作。linux系統也有自己的定時要辦的事情,比如日誌檔案的輪替,whatis資料庫的建立等等。linux例行性工作分一次性的 at 和迴圈執行的 cron 本篇部落...