沒有時間運行命令?使用 cron 的計劃任務意味著你不用熬夜程序也可以運行。
系統管理員(在許多好處中)的挑戰之一是在你該睡覺的時候去運行一些任務。例如,一些任務(包括定期循環運行的任務)需要在沒有人使用計算機資源的時候去運行,如午夜或周末。在下班后,我沒有時間去運行命令或腳本。而且,我也不想在晚上去啟動備份或重大更新。
取而代之的是,我使用兩個服務功能在我預定的時間去運行命令、程序和任務。cron 和 at 服務允許系統管理員去安排任務運行在未來的某個特定時間。at 服務指定在某個時間去運行一次任務。cron 服務可以安排任務在一個周期上重復,比如天、周、或月。
在這篇文章中,我將介紹 cron 服務和怎么去使用它。
常見(和非常見)的 cron 用途
我使用 cron 服務去安排一些常見的事情,比如,每天凌晨 2:00 發生的定期備份,我也使用它去做一些不常見的事情。
許多電腦上的系統時鐘(比如,操作系統時間)都設置為使用網絡時間協議(NTP)。 NTP 設置系統時間后,它不會去設置硬件時鐘,它可能會“漂移”。我使用 cron 基于系統時間去設置硬件時鐘。 我還有一個 Bash 程序,我在每天早晨運行它,去在每臺電腦上創建一個新的 “每日信息” (MOTD)。它包含的信息有當前的磁盤使用情況等有用的信息。 許多系統進程和服務,像 Logwatch、logrotate、和 Rootkit Hunter,使用 cron 服務去安排任務和每天運行程序。crond 守護進程是一個完成 cron 功能的后臺服務。
cron 服務檢查在 /var/spool/cron 和 /etc/cron.d 目錄中的文件,以及 /etc/anacrontab 文件。這些文件的內容定義了以不同的時間間隔運行的 cron 作業。個體用戶的 cron 文件是位于 /var/spool/cron,而系統服務和應用生成的 cron 作業文件放在 /etc/cron.d 目錄中。/etc/anacrontab 是一個特殊的情況,它將在本文中稍后部分介紹。
使用 crontab
cron 實用程序運行基于一個 cron 表(crontab)中指定的命令。每個用戶,包括 root,都有一個 cron 文件。這些文件缺省是不存在的。但可以使用 crontab -e 命令創建在 /var/spool/cron 目錄中,也可以使用該命令去編輯一個 cron 文件(看下面的腳本)。我強烈建議你,不要使用標準的編輯器(比如,Vi、Vim、Emacs、Nano、或者任何其它可用的編輯器)。使用 crontab 命令不僅允許你去編輯命令,也可以在你保存并退出編輯器時,重啟動 crond 守護進程。crontab 命令使用 Vi 作為它的底層編輯器,因為 Vi 是預裝的(至少在大多數的基本安裝中是預裝的)。
現在,cron 文件是空的,所以必須從頭添加命令。 我增加下面示例中定義的作業到我的 cron 文件中,這是一個快速指南,以便我知道命令中的各個部分的意思是什么,你可以自由拷貝它,供你自己使用。
# crontab -eSHELL=/bin/bashMAILTO=root@example.comPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin# For details see man 4 crontabs# 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# backup using the rsbu program to the internal 4TB HDD and then 4TB external01 01 * * * /usr/local/bin/rsbu -vbd1 ; /usr/local/bin/rsbu -vbd2# Set the hardware clock to keep it in sync with the more accurate system clock03 05 * * * /sbin/hwclock --systohc# Perform monthly updates on the first of the month# 25 04 1 * * /usr/bin/dnf -y update
新聞熱點
疑難解答