redhat 9.0 中任務自動執行的實現方式 (轉)
注:最近要在 9.0 上用 crontab實現任務的自動,搜尋了這篇文章,講的還是很詳細。原文在/RHL-9-Manual-TW/custom-gu/index.html">http://www.hk.redhat.com/docs/manuals/linux/RHL-9-Manual-TW/custom-guide/index.html
第 28章 自動工作排程管理:namespace prefix = o ns = "urn:schemas--com::office" />
在 Linux 中,可以設定系統的工作在一個指定的時間、日期或當系統平均負載低於指定的資料時自動執行。 Red Hat Linux 已預先設定好執行重要的系統工作以保持系統的,例如由 locate 指令使用的 slocate 資料庫是每日更新的。 系統管理員可以使用自動的工作管理來執行定期的備份、監視系統與執行自訂的程式碼等等。
Red Hat Linux 中含有四個自動工作管理程式: cron、anacron、at 以及 batch。
28.1. Cron
Cron 是一種系統程式(daemon),它可以依據所設定的時間、日期、月份、星期幾以及星期的結合來排程重覆性工作的執行。
Cron 假設系統是在持續開機的情況下,假如在工作排定的時間,系統沒有開機,該工作將不會被執行。 如要以時間的週期而不是確切的時間來設定工作的話,請參考 28.2 節。 如要排定僅執行一次的工作,請參考 28.3 節。
如要使用 cron 的服務,您必須要安裝 vixie-cron RPM 套件,而且 crond 的服務必須在執行中。 要檢視該套件是否已安裝,請使用 rpm -q vixie-cron 指令; 要檢視服務是否在執行中,請使用 /sbin/service crond status 指令。
28.1.1. 設定 Cron 的工作排程
cron 的主要設定檔案 /etc/crontab 包含了以下這幾行:
=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
TO=
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
一開始的四行是使用來設定 cron 工作要執行之環境的變數,例如 SHELL 變數的值將告訴系統要使用那一個 shell 環境(在此為 bash shell),而 PATH 變數則定義要用來執行指令的路徑。 cron 工作的輸出將會以電子郵件寄到 MAILTO 變數所定義的使用者名稱,假如 MAILTO 變數定義為一個空的字串 (MAILTO=""),將不會傳送任何的電子郵件。 HOME 變數可用來設定執行指令或程式碼時要使用的家目錄。
在 /etc/crontab 檔案中的每一行都代表一項工作,而且都有相同的格式:
分 時 日期 月份 星期幾 指令
· 分 — 從 0 到 59 的任何整數
· 時 — 從 0 到 23 的任何整數
· 日期 — 從 1 到 31 的任何整數(假如有指定月份的話,必須是一個有效的日期)
· 月份 — 從 1 到 12 的任何整數(或者是月份名稱的縮寫,如 jan、feb 等等)
· 星期幾 — 從 0 到 7 的任何整數,0 或 7 代表星期日(或者是縮寫名稱,如 sun、mon 等等)
· 指令 — 要執行的指令(這裡的指令可以是一個例如 ls /proc >> /tmp/proc 的指令或用來執行您所撰寫之程式碼的指令。)
對於以上的任何數值,可以使用一個星號(*)來指定所有有效的數值,例如在月份的一個星號代表在其他數值的範圍內每月執行該指令。
整數之間的一個引號(-)代表整數的一個範圍,例如 1-4 代表整數 1, 2, 3 與 4。
以逗號(,)分隔開的一系列數值代表一個清單,例如 3, 4, 6, 8 代表這四個特定的整數。
斜線符號(/)用來代表時間間隔的數值,只要在一個數值範圍之後加上 /<整數> 即可在該範圍內跳過該整數所指定的數值,例如 0-59/2 在分鐘的欄位中可用來定義每隔兩分鐘執行一次工作。 間隔的數值也可以使用一個星號,如在月份欄位的數值 */3 可以使用來每三個月執行一次工作。
任何以井號(#)開頭的行都是註解,並且都不會被執行。
如您所看到的 /etc/crontab 檔案,它使用 run-parts 程式碼來分別執行 /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly 與 /etc/cron.monthly 目錄中以每小時、每天、每星期或每月為基礎的程式碼。 這些目錄中的檔案應該都是 shell 程式碼。
假如一個 cron 的工作需要在預計的時間執行,而不是以每小時、每天、每星期或每月為基礎,可以將它增加至 /etc/cron.d 目錄中,在這個目錄中的所有檔案都使用與 /etc/crontab 檔案中相同的語法,請參考 範例 28-1 以取得相關範例。
# record the memory usage of the system every monday
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh
範例 28-1. Crontab 的範例
root 之外的使用者可以使用 crontab 工具來設定 cron 的工作,所有使用者定義的 crontabs 都儲存在 /var/spool/cron 目錄中,並且由建立它們的使用者之使用者名稱來執行。 如要以一個使用者來建立一個 crontab,請以該使用者登入並輸入 crontab -e 指令以使用 VISUAL 或 EDITOR 環境變數所指定的編輯器來編輯使用者的 crontab。 這個檔案使用與 /etc/crontab 檔案相同的格式。 在儲存 crontab 所作的變更後,該 crontab 會依據使用者名稱儲存起來,並寫入到 /var/spool/cron/username 檔案中。
cron 系統程式會在每一分鐘檢查 /etc/crontab 檔案、/etc/cron.d/ 與 /var/spool/cron 目錄是否有任何的變更,假如有任何的變更,它們將會被載入記憶體。 因此如果在 crontab 檔案更改後,並不需要重新啟動這個系統程式。
28.1.2. Cron 的存取控制
/etc/cron.allow 與 /etc/cron.deny 檔案是用來限制使用者對 cron 的存取許可權。 這兩個存取控制檔案的格式是在每一行放置一個使用者名稱,兩個檔案中都不允許有空白字元。 假如在修改存取控制檔案後,並不需要重新啟動 cron 系統程式 (crond),這些存取控制檔案將在使用者試著要增加或刪除一個 cron 工作時被讀取。
root 使用者隨時都可以使用 cron,不管使用者的名稱是否有列在存取控制檔案中。
假如 cron.allow 檔案存在的話,只有在其中列出的使用者允許使用 cron,而 cron.deny 檔案便會被忽略。
假如 cron.allow 檔案不存在的話,所有在 cron.deny 檔案中列出的使用者都不允許使用 cron。
28.1.3. 啟動與停止服務
如要啟動 cron 服務,請使用 /sbin/service crond start 指令。 如要停止這項服務,您可以使用 /sbin/service crond stop 指令。 在此建議您在系統開機便啟動這項服務。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981627/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP定時執行任務的實現PHP
- 使用 Bash 自動執行復雜任務
- AsyncTask實現非同步任務執行非同步
- Java中實現執行緒的方式Java執行緒
- Browserflow - 在瀏覽器中自動執行重複性任務瀏覽器
- 玩轉SpringBoot:SpringBoot的幾種定時任務實現方式Spring Boot
- Java多執行緒並行處理任務的實現Java執行緒並行
- Spring Boot 中實現定時任務的兩種方式Spring Boot
- Python實現投遞多執行緒任務Python執行緒
- 實現一個併發任務執行框架框架
- Java實現終止執行緒池中正在執行的定時任務Java執行緒
- crontab+shell 實現每秒執行一個任務
- win10計劃任務程式庫實現定時任務的自動執行程式及問題解決。Win10行程
- Springboot-之定時任務,啟動執行任務Spring Boot
- 幾種實現延時任務的方式(一)
- Python實現定時任務的多種方式Python
- win10 禁止任務自動執行方法 win10自動執行程式怎麼禁止Win10行程
- [自動化執行]沒用過Ansible,你的自動化任務會考慮用它嗎?
- 批量任務體現多執行緒的威力!執行緒
- java執行緒實現方式Java執行緒
- Spring+quartz實現動態化定時任務 (轉)Springquartz
- Spring Boot 實現定時任務的 4 種方式Spring Boot
- 寶塔兩種方式編寫 crontab 自動任務
- Java多執行緒實現方式Java執行緒
- 面試-實現多執行緒的方式面試執行緒
- Java併發實戰(六) 任務執行Java
- Linux 中 Laravel 任務排程不執行LinuxLaravel
- oracle行轉列、列轉行、連續日期數字實現方式及mybatis下實現方式OracleMyBatis
- 180628-動態任務執行框架想法篇框架
- SpringBoot中併發定時任務的實現、動態定時任務的實現(看這一篇就夠了)Spring Boot
- php實現自動化執行環境檢測PHP
- 如何使用 cron 任務在 Linux 中計劃和自動化任務Linux
- golang runtime實現多核並行任務Golang並行
- 任務拆解,悠然自得,自動版本的ChatGPT,AutoGPT自動人工智慧AI任務實踐(Python3.10)ChatGPT人工智慧AIPython
- Map實現執行緒安全的3種方式執行緒
- Java實現多執行緒的三種方式Java執行緒
- 建立執行緒的方式三:實現Callable介面執行緒
- springboot+quartz以持久化的方式實現定時任務Spring Bootquartz持久化
- Jenkins Android APP 持續整合體系建設二—自動部署、執行測試任務,關聯打包任務JenkinsAndroidAPP