如何使用crontab管理你的Linux計(jì)劃任務(wù)
在企業(yè)開發(fā)過程中,我們可能會使用到任務(wù)計(jì)劃程序去執(zhí)行一些特定的事務(wù)。例如:定時(shí)重啟服務(wù)、定時(shí)備份數(shù)據(jù)庫、更新軟件包等。這些如果讓我們?nèi)斯とミM(jìn)行操作的話,是無法保證的。如果我們使用系統(tǒng)中的任務(wù)計(jì)劃執(zhí)行程序的話,可以自動(dòng)化你的日常工作,避免手動(dòng)重復(fù)執(zhí)行相同的任務(wù)。
本文詳細(xì)的講述了在Linux中如何使用任務(wù)計(jì)劃執(zhí)行程序-crontab
。
一、概述
crontab
是一個(gè)Linux/Unix操作系統(tǒng)中用于設(shè)置定時(shí)任務(wù)的命令,其名稱來自于cron
(即定時(shí)任務(wù)調(diào)度程序)和tab
(即表格)兩個(gè)單詞的結(jié)合。
使用crontab命令,用戶可以創(chuàng)建、編輯、查看和刪除一系列定時(shí)任務(wù),這些任務(wù)可以在指定的時(shí)間自動(dòng)執(zhí)行特定的命令或腳本。crontab命令非常常見,通常被用于周期性地執(zhí)行系統(tǒng)維護(hù)、備份、日志清理等任務(wù),或者用于運(yùn)行自定義腳本以執(zhí)行各種定時(shí)任務(wù)。
crontab命令的語法相對簡單,可以通過運(yùn)行man crontab
或crontab --help
來查看幫助文檔。通常,用戶可以使用編輯器(如vi或nano)來編輯crontab文件,以便設(shè)置定時(shí)任務(wù)。
二、安裝
在大多數(shù)Linux發(fā)行版中,crontab已經(jīng)預(yù)裝了。如果你使用的是Ubuntu、Debian、CentOS、Red Hat或其他類似的發(fā)行版,你可以通過以下步驟檢查crontab是否已經(jīng)安裝:
1)、輸入以下命令:
crontab -l
如果未安裝,則會提示:-bash: crontab: command not found
2)、安裝命令:
在Debian、Ubuntu、Linux Mint等基于Debian的發(fā)行版中:
sudo apt-get install cron
在CentOS、Red Hat等基于RPM的發(fā)行版中:
sudo yum install cronie
3)、安裝完成后,可以使用以下命令來檢查是否已經(jīng)成功安裝:
crontab -l
默認(rèn)安裝好后,是沒有定時(shí)任務(wù)的,會提示:no crontab for XXX
三、使用
crontab可以自動(dòng)運(yùn)行命令或腳本,從而在指定的時(shí)間自動(dòng)執(zhí)行任務(wù)。
在Linux系統(tǒng)中,有兩種方式添加定時(shí)任務(wù)
3.1、使用crontab -e
1)、編輯crontab文件
crontab -e
執(zhí)行命令后,會打開一個(gè)編輯界面,可以在里面設(shè)置你的定時(shí)任務(wù)。
2)、設(shè)置定時(shí)任務(wù)
在crontab文件中,每一行代表一個(gè)定時(shí)任務(wù)。以下是一個(gè)例子:
0 0 * * * /usr/local/apps/sh/test.sh
這個(gè)任務(wù)將在每天的凌晨0點(diǎn)執(zhí)行/usr/local/apps/sh/test.sh
腳本。
這個(gè)表達(dá)式跟我們使用的cron表達(dá)式有略微區(qū)別,下面是0 0 * * *
的解析:
.---------------- 分鐘 minute (0 - 59) | .------------- 小時(shí) 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 | | | | | .---- 執(zhí)行腳本 | | | | | | 0 0 * * * command
編輯完后,輸入:wq
保存退出即可。就跟使用vi/vim
編輯文件一樣的。
3)、刪除定時(shí)任務(wù)
需要使用crontab -e
命令來編輯crontab文件,并刪除你想要?jiǎng)h除的那個(gè)定時(shí)任務(wù)的相應(yīng)行。
如果使用的是crontab -r
命令來刪除整個(gè)crontab文件,那么將會刪除所有定時(shí)任務(wù)。因此,在刪除crontab文件之前,請確保是否所有定時(shí)任務(wù)都不需要了。
3.2、編輯/etc/crontab
1)、編輯/etc/crontab
文件:
vi /etc/crontab
2)、添加定時(shí)任務(wù)模板
0 0 * * * root /usr/local/apps/sh/test.sh
這里需要注意的是,使用這種方式添加任務(wù),需要指定一個(gè)用戶
3)、重啟cron服務(wù)
在修改/etc/crontab
文件之后,您必須重啟cron服務(wù),以便使更改生效。
systemctl restart cron
3.3、兩種方式的區(qū)別
1)、crontab -e 是用戶級別的,而 /etc/crontab 是系統(tǒng)級別的。
2)、crontab -e 是每個(gè)用戶獨(dú)立的,而 /etc/crontab 是所有用戶共享的。這意味著,如果想要添加一個(gè)只對自己的定時(shí)任務(wù),那么應(yīng)該使用crontab -e;如果想要添加一個(gè)對所有用戶都有效的定時(shí)任務(wù),那么應(yīng)該使用/etc/crontab。
3)、crontab -e 可以通過指定用戶名來創(chuàng)建其他用戶的定時(shí)任務(wù),而 /etc/crontab 只能由管理員來修改。
4)、crontab -e 是一個(gè)可編輯的文件,可以在其中添加、修改和刪除定時(shí)任務(wù),而 /etc/crontab 是一個(gè)系統(tǒng)文件,需要管理員權(quán)限才能修改。
5)、在crontab -e 中添加的任務(wù)將被保存在特定的用戶目錄下,而 /etc/crontab 中添加的任務(wù)將被保存在系統(tǒng)級別的文件中。
總的來說,如果只需要添加一個(gè)特定用戶的定時(shí)任務(wù),那么使用crontab -e會更加方便;如果需要添加一個(gè)對所有用戶都有效的任務(wù),或者你是系統(tǒng)管理員,則使用/etc/crontab會更加適合。
四、常用方式
1)、處理輸出和錯(cuò)誤
當(dāng)任務(wù)運(yùn)行時(shí),可能會生成輸出和錯(cuò)誤消息。如果你需要將輸出和錯(cuò)誤消息寫入文件,可以使用以下命令:
0 0 * * * /usr/local/apps/sh/test.sh > /var/log/test.log 2>&1
這個(gè)命令將所有輸出和錯(cuò)誤寫入/var/log/backup.log
文件中。請注意,2>&1
將標(biāo)準(zhǔn)錯(cuò)誤消息重定向到標(biāo)準(zhǔn)輸出,以便將它們寫入同一個(gè)文件中。
2)、任務(wù)表達(dá)式實(shí)例
以下是一些時(shí)間間隔的示例:
- 每分鐘執(zhí)行一次任務(wù):
* * * * * command
- 每小時(shí)執(zhí)行一次任務(wù):
0 * * * * command
- 每天凌晨0點(diǎn)執(zhí)行一次任務(wù):
0 0 * * * command
- 每周執(zhí)行一次任務(wù):
0 0 * * 0 command
- 每月執(zhí)行一次任務(wù):
0 0 1 * * command
3)、一鍵添加任務(wù)
我們無論是使用crontab -e
方式還是編輯/etc/crontab
文件,都需要進(jìn)入編輯界面進(jìn)行添加。一下命令可以不用進(jìn)入編輯界面,直接添加定時(shí)任務(wù)。
(crontab -l;echo "0 0 * * * /usr/local/apps/sh/test.sh") | crontab
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Apache和Tomcat服務(wù)器間的區(qū)別、聯(lián)系、整合詳細(xì)介紹
這篇文章主要介紹了Apache和Tomcat服務(wù)器間的區(qū)別、聯(lián)系、整合詳細(xì)介紹,本文重在介紹,沒有安裝、配置等教程,需要的朋友可以參考下2014-07-07