面試官常考的MySQL索引(MySQL進階)
976
2025-04-01
經驗豐富的 Linux 系統管理員知道在后臺自動運行日常維護作業的重要性。
Linux Cron 實用程序是一種在特定時間和/或日期持續調度例行后臺作業的有效方法。
這篇文章講述了15 個很好用的 crontab?工作調度示例。
Linux Crontab 格式
MIN HOUR DOM MON DOW CMD
1. 為特定時間安排作業
cron 的基本用法是在特定的時間執行一個作業,如下所示。這將在6 月 10 日上午 08:30執行完整備份 shell 腳本(完整備份)。
請注意,時間字段使用 24 小時格式。因此,對于上午 8 點使用 8,對于晚上 8 點使用 20。
30 08 10 06 * /home/ramesh/full-backup
30?– 30 分鐘
08?– 08 上午
10?– 第 10 天
06?– 第 6 個月(六月)
*?– 一周中的每一天
2. 為多個實例安排作業(例如,一天兩次)
以下腳本每天進行兩次增量備份。
本示例在每天的 11:00 和 16:00 執行指定的增量備份 shell 腳本(incremental-backup)。字段中的逗號分隔值指定該命令需要在所有提到的時間內執行。
00 11,16 * * * /home/ramesh/bin/incremental-backup
00?– 第 0 分鐘(一小時的頂部)
上午11,16?– 11 點和下午 4 點
*?– 每天
*?– 每個月
*?– 一周中的每一天
3. 安排特定時間范圍的工作(例如僅在工作日)
如果您希望在特定時間范圍內每小時安排一次作業,請使用以下內容。
本示例在每天上午 9 點至下午 6 點的工作時間內(包括周末)檢查數據庫的狀態
00 09-18 * * * /home/ramesh/bin/check-db-status
00?– 第 0 分鐘(一小時的頂部)
09-18?– 9 am, 10 am, 11 am, 12 am, 1 pm, 2 pm, 3 pm, 4 pm, 5 pm, 6 pm
*?– 每天
*?– 每個月
*?– 一周中的每一天
本示例在每個工作日(即不包括周六和周日)的工作時間上午 9 點至下午 6 點檢查數據庫的狀態
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
00?– 第 0 分鐘(一小時的頂部)
09-18?– 9 am, 10 am, 11 am, 12 am, 1 pm, 2 pm, 3 pm, 4 pm, 5 pm, 6 pm
*?– 每天
*?– 每個月
1-5 -周一、周二、周三、周四和周五(每個工作日)
4. 如何查看 Crontab 條目?
要查看您的 crontab 條目,請從您的 unix 帳戶鍵入 crontab -l,如下所示。
ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: This displays crontab of the current logged in user]
以 root 用戶 (su – root) 登錄并執行 crontab -l ,如下所示。
root@dev-db# crontab -l no crontab for root
要查看其他 Linux 用戶的 crontab 條目,請登錄到 root 并使用-u {username} -l,如下所示。
root@dev-db# crontab -u sathiya -l @monthly /home/sathiya/monthly-backup 00 09-18 * * * /home/sathiya/check-db-status
5. 如何編輯 Crontab 條目?
要編輯 crontab 條目,請使用 crontab -e,如下所示。默認情況下,這將編輯當前登錄的用戶 crontab。
ramesh@dev-db$ crontab -e @yearly /home/ramesh/centos/bin/annual-maintenance */10 * * * * /home/ramesh/debian/bin/check-disk-space ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C [Note: This will open the crontab file in Vim editor for editing. Please note cron created a temporary /tmp/crontab.XX... ]
當你用 :wq 保存上述臨時文件時,它會保存 crontab 并顯示以下消息,表明 crontab 修改成功。
~ "crontab.XXXXyjWkHw" 2L, 83C written crontab: installing new crontab
以 root 用戶 (su – root) 登錄并執行 crontab -e,如下所示。
root@dev-db# crontab -e
要編輯其他 Linux 用戶的 crontab 條目,請登錄到 root 并使用-u {username} -e,如下所示。
root@dev-db# crontab -u sathiya -e @monthly /home/sathiya/fedora/bin/monthly-backup 00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status ~ ~ ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C
6. 使用 Cron 每分鐘安排一個作業。
理想情況下,您可能不需要每分鐘安排一次作業。但是理解這個例子將幫助你理解本文下面提到的其他例子。
* * * * * CMD
* 表示所有可能的單位——即全年每小時的每一分鐘。除了直接使用這個 *,您會發現它在以下情況下非常有用。
當您在分鐘字段中指定 */5 時,表示每 5 分鐘一次。
當您在分鐘字段中指定 0-10/2 時,意味著在前 10 分鐘內每 2 分鐘一次。
因此,上述約定可用于所有其他 4 個字段。
7. 每 10 分鐘安排一個后臺 Cron 作業。
如果您想每 10 分鐘檢查一次磁盤空間,請使用以下方法。
*/10 * * * * /home/ramesh/check-disk-space
它全年每 10 分鐘執行一次指定的命令 check-disk-space。但是您可能需要僅在辦公時間執行命令,反之亦然。上面的例子展示了如何做這些事情。
我們可以使用單個關鍵字來指定它,而不是在 5 個字段中指定值,如下所述。
在某些特殊情況下,您可以使用 @ 后跟關鍵字來代替上述 5 個字段,例如重新啟動、午夜、每年、每小時。
8. 使用@yearly 在每年的第一分鐘安排工作
如果您希望在每年的第一分鐘執行一項工作,那么您可以使用@yearly?cron 關鍵字,如下所示。
這將在每年 1 月 1 日的 00:00 使用年度維護 shell 腳本執行系統年度維護。
@yearly /home/ramesh/red-hat/bin/annual-maintenance
9. 使用@monthly 安排每個月開始的 Cron 作業
它與上面的@yearly 相似。但是使用@monthly?cron 關鍵字每月執行一次命令。
這將在每月 1 日的 00:00 執行 shell 腳本磁帶備份。
@monthly /home/ramesh/suse/bin/tape-backup
10. 每天使用@daily 安排后臺作業
使用@daily?cron 關鍵字,這將在每天 00:00 使用 cleanup-logs shell 腳本執行每日日志文件清理。
@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"
11. 如何在每次重啟后使用@reboot 執行 Linux 命令?
使用@reboot?cron 關鍵字,這將在機器每次啟動后執行一次指定的命令。
@reboot CMD
12. 如何使用 MAIL 關鍵字禁用/重定向 Crontab 郵件輸出?
默認情況下,crontab 將作業輸出發送給安排作業的用戶。如果要將輸出重定向到特定用戶,請在 crontab 中添加或更新 MAIL 變量,如下所示。
ramesh@dev-db$ crontab -l MAIL="ramesh" @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: Crontab of the current logged in user with MAIL variable]
如果您不希望將郵件發送到任何地方,即停止通過電子郵件發送 crontab 輸出,請在 crontab 中添加或更新 MAIL 變量,如下所示。
MAIL=""
13. 如何使用 Crontab 每秒執行一次 Linux Cron 作業。
您不能安排每秒一次的 cronjob。因為在 cron 中,您可以指定的最小單位是分鐘。在典型的場景中,我們大多數人沒有理由每秒在系統中運行任何作業。
14.在Crontab中指定PATH變量
以上所有例子我們都指定了需要執行的Linux命令或shell-script的絕對路徑。
例如,如果您只想指定tape-backup,而不是指定/home/ramesh/tape-backup,則將路徑/home/ramesh 添加到crontab 中的PATH 變量中,如下所示。
ramesh@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh @yearly annual-maintenance */10 * * * * check-disk-space [Note: Crontab of the current logged in user with PATH variable]
15. 從 Cron 文件安裝 Crontab
除了直接編輯 crontab 文件之外,您還可以先將所有條目添加到 cron 文件中。在文件中包含所有這些條目后,您可以將它們上傳或安裝到 cron,如下所示。
ramesh@dev-db$ crontab -l no crontab for ramesh $ cat cron-file.txt @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space ramesh@dev-db$ crontab cron-file.txt ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space
注意:這會將 cron-file.txt 安裝到您的 crontab,這也將刪除您的舊 cron 條目。因此,從 cron-file.txt 上傳 cron 條目時請注意。
Linux Shell Unix
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。