Cron&crontab,解釋

盧卡因 他出版 不久以前 有關cron和crontab的優秀教程 我認為值得分享。 Cron與Windows中的計劃任務等效,只有從終端處理。 那些希望使用可視界面實現相同目標的人可以看到此 另一個項目.

什麼是cron?

cron這個名字來自希臘的chronos,意思是“時間”。 在Unix操作系統中,cron是一個常規的後台進程管理器(daemon),它定期運行進程或腳本(例如,每分鐘,每天,每週或每月)。 在crontab文件中指定了必須執行的進程以及必須執行的時間。

科莫funciona

cron守護程序從 /etc/rc.d/ o / etc / init.d下 取決於分佈。 Cron在後台運行,每分鐘檢查一次crontab任務表 / etc / crontab中/ var / spool / cron 尋找要完成的任務。 作為用戶,我們可以添加帶有任務的命令或腳本以進行cron自動化某些流程。 例如,這對於自動化系統或良好備份系統的更新很有用。

相關文章:
教程:安裝.tar.gz和.tar.bz2軟件包

什麼是Crontab?

Crontab是一個簡單的文本文件,存儲了在用戶指定的時間要執行的命令列表。 Crontab將檢查應該執行腳本或命令的日期和時間,執行權限,並在後台執行。 每個用戶可以擁有自己的crontab文件,實際上 / etc / crontab中 假定它是root用戶的crontab文件,當普通用戶(甚至root)想要生成自己的crontab文件時,我們將使用crontab命令。

Crontab是在多用戶系統上以簡單系統用戶或root用戶身份管理cron任務的最簡單方法。

使用crontab

我們從一個簡單的例子開始。

我們將使系統更新自動化,以消除“我總是必須更新,但我不喜歡那樣的東西!”的煩惱。

如何
相關文章:
了解系統的命令(標識硬件和某些軟件配置)

首先,我們將編寫一個腳本。 此腳本將由cron調用,並將包含我們希望它執行的所有指令,因此在將其包含在cron中之前,有必要以幾種情況和幾種方式對其進行測試,這是一個簡單的更新腳本,如下所示:

#!/ bin / bash#腳本更新示例#選擇您的發行版#debian-ubuntu#apt-get更新&apt-get -y升級#fedora #yum -y update #Arch #pacman --noconfirm -Syu

從發行行中刪除#。 如果是Ubuntu / Debian,則以apt-get開頭。

我們將腳本另存為update.sh(例如,腳本目錄位於您的家)。 我們使用以下命令更改所述腳本的執行權限:

chmod a + x〜/腳本/ update.sh

我們執行了幾次腳本,以驗證一切是否正常運行,我們修改了必要的內容(該內容不得包含錯誤,否則cron只會一遍又一遍地重複一個錯誤)。 現在將任務添加到我們的crontab中。

將任務添加到crontab

我們使用crontab -e執行crontab的版本,在某些發行版(例如Ubuntu)中,它使我們可以選擇所需的文本編輯器,其餘的則留給vi。 crontab文件將如下所示。

#mh dom mon dow用戶命令

其中:

  • m 對應於腳本執行的分鐘,取值範圍為0到59
  • h 確切時間,將處理24小時格式,值的範圍是0到23是午夜0:12。
  • DOM 指的是一個月中的某天,例如,如果您想每15天運行一次,則可以指定15
  • 窗口 表示星期幾,可以是數字(0到7,其中0和7是星期日)或英語中一天的前3個字母:mon,tue,wed,thu,fri,sat,sun。
  • 用戶 定義將執行命令的用戶,可以是root用戶,也可以是其他用戶,只要他們有權執行腳本即可。
  • 命令 指要執行的命令或腳本的絕對路徑,例如: /home/usuario/scripts/update.sh,如果它調用腳本,那麼它必須是可執行的

為了清楚起見,下面介紹了一些cron任務示例:

15 10 * * *用戶/home/usuario/scripts/update.sh

它將在每天上午10:15運行update.sh腳本

15 22 * * *用戶/home/usuario/scripts/update.sh

它將在每天晚上10:15運行update.sh腳本

00 10 * * 0 root apt-get -y update根用戶

它將在每個星期日的上午10:00運行更新

45 10 * * sun root apt-get -y更新

根用戶將在每個星期日(星期日)上午10:45運行更新

30 7 20 11 *用戶/home/usuario/scripts/updata.sh

20月7日30:XNUMX,用戶將運行腳本

30 7 11 11 sun用戶/home/usuario/scripts/pastel_con_velitas.sh

在11月7日上午30:XNUMX(即星期日),用戶將慶祝其sysadmin(即我)

01 * * * *用戶/home/usuario/scripts/molestorecordatorio.sh

每天每時每刻的煩人提醒(不建議使用)。

他們仍然可以處理 特殊範圍:

30 17 * * 1,2,3,4,5

從星期一到星期五,每天下午5:30。

00 12 1,15,28 * *

每個月的第一個,第十五和第12個中午28點(理想的工資單)

如果這令人困惑,則crontab處理 特殊字符串定義這些範圍.

@reboot在啟動時運行一次
@yearly每年僅運行一次:0 0 1 1 *
@每年與@yearly相同
@monthly每月運行一次,第一天:0 0 1 * *
@weekly每週每週第一個小時的第一分鐘。 0 0 * * 0''。
每天@凌晨12:00 0 0 * * *
@midnight與@daily相同
每小時的第一分鐘@hourly:0 * * * *

它的使用非常簡單。

@hourly用戶/home/user/scripts/molestorecordatorio.sh @monthly用戶/home/user/scripts/backup.sh @daily root apt-get更新&& apt-get -y升級

最後但並非最不重要的:

Cron工作管理

crontab文件

用用戶定義的文件替換現有的crontab文件

crontab -e命令

編輯用戶的crontab文件,每一行將是一個新的crontab任務。

crontab -l

列出所有用戶的crontab任務

定時任務-d

刪除用戶的crontab

crontab -c目錄

定義用戶的crontab目錄(此目錄必須具有用戶的寫入和執行權限)

crontab -u用戶

處理另一個用戶的crontab的前綴,例如:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u用戶

與許多其他工具一樣,可以在以下位置更深入,更詳細地了解此工具:

謝謝Lucain!