盧卡因 他出版 不久以前 有關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自動化某些流程。 例如,這對於自動化系統或良好備份系統的更新很有用。
什麼是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用戶
與許多其他工具一樣,可以在以下位置更深入,更詳細地了解此工具:
呃...有點混亂。
* / 30分鐘(在分鐘字段中)丟失,每30分鐘運行一次...
只是我要發表評論,直到我決定查看評論😀
此修飾符是非常重要的信息,也非常有用。
您好!
現在,我每45分鐘測試一次配置。
* / 45 * * * *,並且該指令在每小時和每小時的45分鐘執行一次。 也就是說:
它的運行時間為3:45,然後是4:00、4:45,然後是5:00、5:45、6:00、6:45,依此類推。
我有什麼問題嗎?我該怎麼做,以至於每45分鐘一次,或者每小時至少45分鐘一次。
您好!
現在,我每45分鐘測試一次配置。
* / 45 * * * *,並且該指令在每小時和每小時的45分鐘執行一次。 也就是說:
它的運行時間為3:45,然後是4:00、4:45,然後是5:00、5:45、6:00、6:45,依此類推。
我有什麼問題嗎?我該怎麼做,以至於每45分鐘一次,或者每小時至少45分鐘一次。
您好超級有用的信息,以闡明cron的工作方式。
字節
為*
太好了,謝謝您澄清了cron的工作原理。
據我了解,這條線將在晚上10:15執行,如果我錯了,請糾正我
好吧,它說上午10:15
15 22 * * *用戶/home/usuario/scripts/update.sh
你好! 非常好的信息。
要每半小時執行一個腳本,應該添加到CronTab的行將是:“ 30 * * * * root Scrip.sh”對嗎? 非常感謝!
否。如果我沒記錯的話,您必須輸入/ 30 * * * * root Scrip.sh。
也就是說,在/之前加上/。
乾杯! 保羅
您好,我喜歡您的帖子,它很完整,但是我想問您一些事情。
我在使用此命令和“ at”這樣的命令時遇到問題。
我想在特定時間運行腳本並放入
在-f /home/mi_user/Desk/script.sh 18:08示例
並且腳本不在屏幕上執行,即在終端中執行,是否在後台執行?
對於cron來說,同樣的事情發生在我身上,我使用“ crontab -e”編輯crontab文件
最後,我添加以下行:
46 19 my_user /home/mi_user/Desk/script.sh
它什麼也不做,也不顯示腳本。
有什麼建議嗎? 非常感謝您,給您帶來的不便深表歉意
為了顯示終端,您可能必須運行終端並將腳本作為參數傳遞。
例如:
lxterminal -e“ my_user /home/mi_user/Desktop/script.sh”
使用的參數可能會因您使用的終端仿真器而異。
我希望它能起作用。
擁抱! 保羅
感謝您的貢獻。
10分 !!
salu2!
非常感謝您,這對我弄清楚了很多事情,非常感謝,有關更多詳細信息或問題,我將在手冊頁中重申問候。
男人非常感謝您,我一直在閱讀和測試示例。 非常感謝...這是可以理解的。 問候
我使用了ubuntu Server 12.04.2 LTS,並使用了我擁有的crontab版本來刪除用戶作業列表,即crontab -r(和-l,如本手冊所述)。 當然,這是版本問題。
另一方面,我曾經只運行crontab,這種讓我創建了自己的執行文件,但這不是正在執行的文件。 運行的是/ etc / crontab中的一個。 也許有人會使用該評論。
PS(我用locate和whereis crontab進行了搜索,但是它只返回了上述地址和另一個加密的文件,因此,如果執行的文件是/ etc / crontab中的文件,但是執行crontab -e命令時,我的將與我定義的所有作業一起出現)此文件存儲在哪裡? 問候。 我總是使用root登錄。
優秀,非常有用!
您好,我想這樣做…………«15 10 * * * root ifdown eth0»
那就是說,在某個時間網卡被關閉了…………好吧,我把它放在crontab中了,它沒用……..怎麼了?
的問候和感謝
您沒有在標題“將任務添加到crontab”中定義“ mon”
這篇文章仍然不錯,cron非常有用。
好帖子好酷,問我
如果我想跟踪任務執行留下的記錄,在哪裡可以看到?
是decdir,我想查看此文件過去執行的操作的歷史記錄,我想查看誰修改了該文件以及日期
謝謝
我想檢查這個的修改歷史
我該怎麼做
謝謝
早上好!
我認為在ubuntu腳本中您犯了一個錯誤,您將ap-get -y升級而不是apt-get -y升級。 (您留下了t)。
問候。
也是如此謝謝!
擁抱! 保羅
我想知道如何創建一個cron文件,以便能夠指定每次執行的時間,目錄等。
感謝您澄清cron的操作和基本命令,現在請您娛樂一下。
每當我尋找有關Gnu / Linux的任何主題的信息時,我都會四處搜尋,最終在90%的案例中找到這個偉大社區中最好的教程,我認為從現在開始,我將在這裡開始,然後在其他地方。
問候
謝謝桑德! 一個擁抱! 保羅
dom =每月的一天
道瓊斯指數=星期幾
關聯起來會更容易
非常感謝,非常完整,並且解釋清楚。
這是我的OS老師給我們的東西,我什麼都沒做,現在我知道為什麼課堂如此糟糕.-。嗯,這和家庭作業xD一樣。
估計,
查詢,可以限制任務的持續時間嗎?
例如,我有一個每5分鐘重複一次的任務,如果此任務仍處於活動狀態,請重複執行一次,殺死它並再次運行。
謝謝你,
馬塞洛-
你好,馬塞洛!
我認為如果您在我們的問答服務中提出這個問題會更好 問 DesdeLinux 這樣整個社區都可以幫助您解決問題。
擁抱,巴勃羅。
好帖子。
每個終端將任務添加到crontab的命令是什麼(無需輸入crontab並使用'crontab -e'手動添加任務,或將crontab替換為帶有'crontab文件'的另一個crontab)。
這個想法是創建一個外部腳本以將任務添加到crontab
謝謝
在我看來,您可以使用“ echo”來添加“ |”。 貓>>'cronotab路徑(/ etc / cronotab)'«
表達式每三天準確運行一次的方式
您好!
我在執行cron作業時遇到問題。
我使用cronta -e運行以下任務:
01 * * * * root /home/user/script/mfile.sh
但是任務沒有完成。 我檢查了myfile.sh是否具有執行權限,並且執行它的用戶是root。
我在/ etc / crontab中運行相同的任務,重新啟動服務後,它對我也不起作用。
myfile.sh的內容是用於更新數據庫的命令,如果我在控制台中運行它,它將起作用。
知道可能是什麼問題嗎?
數據庫用戶可能沒有所有權限,因此您首先必須從數據庫引擎導出環境變量。
例如,在db2中,此行將轉到腳本的開頭
。 /主頁/ db2inst1 / sqllib / db2profile
另一個原因可能是腳本需要連接到數據庫,在腳本內建立到數據庫的連接
我不知道我必須重新啟動crond,我已經為此戰鬥了一段時間
他們將知道如何指示任務在每個月的每個月末在指定的時間運行..詳細信息是我無法知道我需要花費每個月的最後一天.. ??? 我不得不一一寫下它們,但是當二月底到來時,這對我來說是很複雜的。
美好的一天!!
如何停止crontab中正在執行的進程?
流程*…………
可以幫我嗎? 由minha撰寫的eu tenho um腳本無法正常工作,無法執行crontab! 拒絕所有許可,而不是執行任務的特定cron或用戶-幾乎沒有任何反應! 我想知道您是否可以幫助我,其他一些事情也無濟於事! l
您如何安排任務在該月的最後一天(天:31-30-28)運行?
如您所知,su命令用於在控制台中更改用戶。 如果我這樣使用su命令:“您的用戶”更改用戶但沒有正確設置“ user”,那麼如果我以以下方式運行su:“ su-user”,請通過加載用戶設置來更改用戶。 使用cron可以指示用戶,但是如何加載該用戶的設置?
如果我想停止它?
HOLA,
我不知道自己在做什麼錯,但是我按照這些步驟進行操作,但沒有執行任何操作。 我試過了:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * *根usr / bin / test.sh
一無所有。 它不執行任何操作。 我已經重新啟動,一切。
非常感謝