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!

48條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   阿爾瓦羅·奧爾蒂斯(Alvaro Ortiz) 他說:

    呃...有點混亂。

  2.   補品 他說:

    * / 30分鐘(在分鐘字段中)丟失,每30分鐘運行一次...

    1.    erm3nda 他說:

      只是我要發表評論,直到我決定查看評論😀
      此修飾符是非常重要的信息,也非常有用。

      1.    奇卡 他說:

        您好!
        現在,我每45分鐘測試一次配置。

        * / 45 * * * *,並且該指令在每小時和每小時的45分鐘執行一次。 也就是說:

        它的運行時間為3:45,然後是4:00、4:45,然後是5:00、5:45、6:00、6:45,依此類推。

        我有什麼問題嗎?我該怎麼做,以至於每45分鐘一次,或者每小時至少45分鐘一次。

    2.    奇卡 他說:

      您好!
      現在,我每45分鐘測試一次配置。

      * / 45 * * * *,並且該指令在每小時和每小時的45分鐘執行一次。 也就是說:

      它的運行時間為3:45,然後是4:00、4:45,然後是5:00、5:45、6:00、6:45,依此類推。

      我有什麼問題嗎?我該怎麼做,以至於每45分鐘一次,或者每小時至少45分鐘一次。

  3.   鬆弛 他說:

    您好超級有用的信息,以闡明cron的工作方式。
    字節

  4.   鬆弛 他說:

    為*

  5.   獵人 他說:

    太好了,謝謝您澄清了cron的工作原理。

  6.   雅各 他說:

    據我了解,這條線將在晚上10:15執行,如果我錯了,請糾正我
    好吧,它說上午10:15
    15 22 * * *用戶/home/usuario/scripts/update.sh

  7.   奧古斯丁 他說:

    你好! 非常好的信息。
    要每半小時執行一個腳本,應該添加到CronTab的行將是:“ 30 * * * * root Scrip.sh”對嗎? 非常感謝!

  8.   讓我們使用linux 他說:

    否。如果我沒記錯的話,您必須輸入/ 30 * * * * root Scrip.sh。
    也就是說,在/之前加上/。
    乾杯! 保羅

  9.   喬納森 他說:

    您好,我喜歡您的帖子,它很完整,但是我想問您一些事情。
    我在使用此命令和“ at”這樣的命令時遇到問題。

    我想在特定時間運行腳本並放入

    在-f /home/mi_user/Desk/script.sh 18:08示例

    並且腳本不在屏幕上執行,即在終端中執行,是否在後台執行?

    對於cron來說,同樣的事情發生在我身上,我使用“ crontab -e”編輯crontab文件

    最後,我添加以下行:

    46 19 my_user /home/mi_user/Desk/script.sh

    它什麼也不做,也不顯示腳本。

    有什麼建議嗎? 非常感謝您,給您帶來的不便深表歉意

    1.    讓我們使用linux 他說:

      為了顯示終端,您可能必須運行終端並將腳本作為參數傳遞。

      例如:

      lxterminal -e“ my_user /home/mi_user/Desktop/script.sh”

      使用的參數可能會因您使用的終端仿真器而異。

      我希望它能起作用。

      擁抱! 保羅

  10.   帕特雷卡斯 他說:

    感謝您的貢獻。

    10分 !!

    salu2!

  11.   魯道夫 他說:

    非常感謝您,這對我弄清楚了很多事情,非常感謝,有關更多詳細信息或問題,我將在手冊頁中重申問候。

  12.   jahir 他說:

    男人非常感謝您,我一直在閱讀和測試示例。 非常感謝...這是可以理解的。 問候

  13.   喬凡尼 他說:

    我使用了ubuntu Server 12.04.2 LTS,並使用了我擁有的crontab版本來刪除用戶作業列表,即crontab -r(和-l,如本手冊所述)。 當然,這是版本問題。

    另一方面,我曾經只運行crontab,這種讓我創建了自己的執行文件,但這不是正在執行的文件。 運行的是/ etc / crontab中的一個。 也許有人會使用該評論。

    PS(我用locate和whereis crontab進行了搜索,但是它只返回了上述地址和另一個加密的文件,因此,如果執行的文件是/ etc / crontab中的文件,但是執行crontab -e命令時,我的將與我定義的所有作業一起出現)此文件存儲在哪裡? 問候。 我總是使用root登錄。

  14.   塞巴斯蒂安 他說:

    優秀,非常有用!

  15.   MMM 他說:

    您好,我想這樣做…………«15 10 * * * root ifdown eth0»

    那就是說,在某個時間網卡被關閉了…………好吧,我把它放在crontab中了,它沒用……..怎麼了?

    的問候和感謝

  16.   米格爾 他說:

    您沒有在標題“將任務添加到crontab”中定義“ mon”

    這篇文章仍然不錯,cron非常有用。

  17.   汽車 他說:

    好帖子好酷,問我
    如果我想跟踪任務執行留下的記錄,在哪裡可以看到?

    是decdir,我想查看此文件過去執行的操作的歷史記錄,我想查看誰修改了該文件以及日期

    謝謝

  18.   奧斯卡 他說:

    我想檢查這個的修改歷史

    我該怎麼做

    謝謝

  19.   安德烈斯·萊多(Andres Ledo) 他說:

    早上好!

    我認為在ubuntu腳本中您犯了一個錯誤,您將ap-get -y升級而不是apt-get -y升級。 (您留下了t)。

    問候。

    1.    讓我們使用linux 他說:

      也是如此謝謝!
      擁抱! 保羅

  20.   加布里埃爾 他說:

    我想知道如何創建一個cron文件,以便能夠指定每次執行的時間,目錄等。

  21.   瓦倫丁 他說:

    感謝您澄清cron的操作和基本命令,現在請您娛樂一下。

  22.   砂光機 他說:

    每當我尋找有關Gnu / Linux的任何主題的信息時,我都會四處搜尋,最終在90%的案例中找到這個偉大社區中最好的教程,我認為從現在開始,我將在這裡開始,然後在其他地方。

    問候

    1.    讓我們使用linux 他說:

      謝謝桑德! 一個擁抱! 保羅

  23.   達約 他說:

    dom =每月的一天
    道瓊斯指數=星期幾
    關聯起來會更容易

  24.   復活節的 他說:

    非常感謝,非常完整,並且解釋清楚。

  25.   馬克西利亞 他說:

    這是我的OS老師給我們的東西,我什麼都沒做,現在我知道為什麼課堂如此糟糕.-。嗯,這和家庭作業xD一樣。

  26.   馬* 他說:

    估計,

    查詢,可以限制任務的持續時間嗎?
    例如,我有一個每5分鐘重複一次的任務,如果此任務仍處於活動狀態,請重複執行一次,殺死它並再次運行。

    謝謝你,
    馬塞洛-

    1.    讓我們使用linux 他說:

      你好,馬塞洛!

      我認為如果您在我們的問答服務中提出這個問題會更好 問 DesdeLinux 這樣整個社區都可以幫助您解決問題。

      擁抱,巴勃羅。

  27.   aj 他說:

    好帖子。
    每個終端將任務添加到crontab的命令是什麼(無需輸入crontab並使用'crontab -e'手動添加任務,或將crontab替換為帶有'crontab文件'的另一個crontab)。
    這個想法是創建一個外部腳本以將任務添加到crontab
    謝謝

    1.    大衛 他說:

      在我看來,您可以使用“ echo”來添加“ |”。 貓>>'cronotab路徑(/ etc / cronotab)'«

  28.   拉斐爾·維拉(Rafael Vera) 他說:

    表達式每三天準確運行一次的方式

  29.   何塞·安東尼奧 他說:

    您好!

    我在執行cron作業時遇到問題。

    我使用cronta -e運行以下任務:

    01 * * * * root /home/user/script/mfile.sh

    但是任務沒有完成。 我檢查了myfile.sh是否具有執行權限,並且執行它的用戶是root。

    我在/ etc / crontab中運行相同的任務,重新啟動服務後,它對我也不起作用。
    myfile.sh的內容是用於更新數據庫的命令,如果我在控制台中運行它,它將起作用。
    知道可能是什麼問題嗎?

    1.    弗雷德 他說:

      數據庫用戶可能沒有所有權限,因此您首先必須從數據庫引擎導出環境變量。
      例如,在db2中,此行將轉到腳本的開頭
      。 /主頁/ db2inst1 / sqllib / db2profile

      另一個原因可能是腳本需要連接到數據庫,在腳本內建立到數據庫的連接

  30.   LA3 他說:

    我不知道我必須重新啟動crond,我已經為此戰鬥了一段時間

  31.   kenia 他說:

    他們將知道如何指示任務在每個月的每個月末在指定的時間運行..詳細信息是我無法知道我需要花費每個月的最後一天.. ??? 我不得不一一寫下它們,但是當二月底到來時,這對我來說是很複雜的。

  32.   耶穌 他說:

    美好的一天!!

    如何停止crontab中正在執行的進程?

  33.   耶穌 他說:

    流程*…………

  34.   與Julianna 他說:

    可以幫我嗎? 由minha撰寫的eu tenho um腳本無法正常工作,無法執行crontab! 拒絕所有許可,而不是執行任務的特定cron或用戶-幾乎沒有任何反應! 我想知道您是否可以幫助我,其他一些事情也無濟於事! l

  35.   安托克斯 他說:

    您如何安排任務在該月的最後一天(天:31-30-28)運行?

  36.   Tfercho 他說:

    如您所知,su命令用於在控制台中更改用戶。 如果我這樣使用su命令:“您的用戶”更改用戶但沒有正確設置“ user”,那麼如果我以以下方式運行su:“ su-user”,請通過加載用戶設置來更改用戶。 使用cron可以指示用戶,但是如何加載該用戶的設置?

  37.   他說:

    如果我想停止它?

  38.   雷吉 他說:

    HOLA,
    我不知道自己在做什麼錯,但是我按照這些步驟進行操作,但沒有執行任何操作。 我試過了:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * *根usr / bin / test.sh

    一無所有。 它不執行任何操作。 我已經重新啟動,一切。

  39.   費格斯 他說:

    非常感謝