linux中利用Crontab做定時任務詳解
關于crontab的安裝請參考:
Linux中Crontab(定時任務)安裝及配置詳解。
(1) cron(crond)介紹:
crond是linux下用來周期性執行某種任務或等待處理某些事件的一個守護進程,crond進程啟動后,會每分鐘定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
我們經常使用的是crontab命令是cron table的簡寫,它是cron的配置文件,也可以叫它作業列表,我們可以在以下文件夾內找到相關配置文件。
補充:
Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。
(2) 配置文件:
/etc/cron.deny:
該文件中所列用戶不允許使用crontab命令。
/etc/cron.allow
該文件中所列用戶允許使用crontab命令。
/etc/cron.d/:
這個目錄用來存放任何要執行的crontab文件或腳本。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。
/etc/crontab文件就是系統任務調度的配置文件。
/etc/crontab:
這個文件負責調度各種管理和維護任務。
用戶任務調度:用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。
所有用戶定義的crontab 文件都被保存在/var/spool/cron目錄中。
其文件名與用戶名一致。
/var/spool/cron/:
目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名。
補充:
還可以把腳本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目錄中,讓它每小時/天/星期/月執行一次。
(3)crontab文件的含義:
用戶所建立的crontab文件中,每一行都代表一項任務,每行的每個字段代表一項設置,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段。
格式如下:
minute hour day month week command
其中:
minute:表示分鐘,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。
command:要執行的命令,可以是系統命令/自己編寫的腳本文件。
在以上各個字段中,還可以使用以下特殊字符:
*:代表所有可能的值。
例如:month字段如果是星號,則表示在滿足其它字段的制約條件后每月都執行該命令操作。
,:可以用逗號隔開的值指定一個列表范圍。
例如:"1,2,5,7,8,9"
-:可以用整數之間的中杠表示一個整數范圍。
例如:"2-6"表示"2,3,4,5,6"
/:可以用正斜線指定時間的間隔頻率。
例如:"0-23/2"表示每兩小時執行一次。
(3) crontab命令詳解
格式:
crontab [-u username]
參數:
-e:編輯工作表
-l:列出工作表里的命令
-r:刪除工作
補充:
省略用戶表表示操作當前用戶的crontab。
功能:
在固定的間隔時間執行指定的系統指令/腳本。
常用周期性的日志分析或數據備份等工作。
(4)操作crontab文件
crontab -e進入當前用戶的工作表編輯,是常見的vim界面。
1、新建crontab
每天的早9點到晚5點打印date到控制臺
#echo the date to the console every 30minute between 9pm and 5am
0,30 09-17 * * * /bin/echo `date` > /dev/console
2、列出crontab文件
crontab -l
3、 備份
crontab -l > ~/mycron
4、 刪除
5、 恢復
crontab ~/mycron
補充:
恢復的兩種方式
剛剛我們備份到家目錄下一個mycron文件
方式1:
將其mycron拷貝到/var/spool/cron/<username>,其中<username>是用戶名。
方式2:
如果由于權限問題無法完成拷貝,可以用crontab <filename>
(4)、補充一些實用的實例
以下的youCommand代表的是你自己定義的命令。
案例1:
每1分鐘執行一次
* * * * * youCommand
案例2:
每小時的第3和第15分鐘執行
3,1
Linux中Crontab定時任務簡單講解
關于crontab的安裝請參考:
Linux中Crontab(定時任務)安裝及配置詳解。
(1) cron(crond)介紹:
crond是linux下用來周期性執行某種任務或等待處理某些事件的一個守護進程,crond進程啟動后,會每分鐘定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。
我們經常使用的是crontab命令是cron table的簡寫,它是cron的配置文件,也可以叫它作業列表,我們可以在以下文件夾內找到相關配置文件。
補充:
Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。
(2) 配置文件:
/etc/cron.deny:
該文件中所列用戶不允許使用crontab命令。
/etc/cron.allow
該文件中所列用戶允許使用crontab命令。
/etc/cron.d/:
這個目錄用來存放任何要執行的crontab文件或腳本。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。
/etc/crontab文件就是系統任務調度的配置文件。
/etc/crontab:
這個文件負責調度各種管理和維護任務。
用戶任務調度:用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。
所有用戶定義的crontab 文件都被保存在/var/spool/cron目錄中。
其文件名與用戶名一致。
/var/spool/cron/:
目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名。
補充:
還可以把腳本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目錄中,讓它每小時/天/星期/月執行一次。
(3)crontab文件的含義:
用戶所建立的crontab文件中,每一行都代表一項任務,每行的每個字段代表一項設置,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段。
格式如下:
minute hour day month week command
其中:
minute:表示分鐘,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。
command:要執行的命令,可以是系統命令/自己編寫的腳本文件。
在以上各個字段中,還可以使用以下特殊字符:
*:代表所有可能的值。
例如:month字段如果是星號,則表示在滿足其它字段的制約條件后每月都執行該命令操作。
,:可以用逗號隔開的值指定一個列表范圍。
例如:"1,2,5,7,8,9"
-:可以用整數之間的中杠表示一個整數范圍。
例如:"2-6"表示"2,3,4,5,6"
/:可以用正斜線指定時間的間隔頻率。
例如:"0-23/2"表示每兩小時執行一次。
(3) crontab命令詳解
格式:
crontab [-u username]
參數:
-e:編輯工作表
-l:列出工作表里的命令
-r:刪除工作
補充:
省略用戶表表示操作當前用戶的crontab。
功能:
在固定的間隔時間執行指定的系統指令/腳本。
常用周期性的日志分析或數據備份等工作。
(4)操作crontab文件
crontab -e進入當前用戶的工作表編輯,是常見的vim界面。
1、新建crontab
每天的早9點到晚5點打印date到控制臺
#echo the date to the console every 30minute between 9pm and 5am
0,30 09-17 * * * /bin/echo `date` > /dev/console
2、列出crontab文件
crontab -l
3、 備份
crontab -l > ~/mycron
4、 刪除
5、 恢復
crontab ~/mycron
補充:
恢復的兩種方式
剛剛我們備份到家目錄下一個mycron文件
方式1:
將其mycron拷貝到/var/spool/cron/<username>,其中<username>是用戶名。
方式2:
如果由于權限問題無法完成拷貝,可以用crontab <filename>
(4)、補充一些實用的實例
以下的youCommand代表的是你自己定義的命令。
案例1:
每1分鐘執行一次
* * * * * youCommand
案例2:
每小時的第3和第15分鐘執行
3,15 * * * * youCommand
案例3:
在上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * * youCommand
案例4:
每隔兩天的上午8點到11點的第3和第15分鐘執行
3,15 8-11 */2 * * youCommand
案例5:
每周一上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * 1 youCommand
案例6:
每晚的21:30重啟smb
30 21 * * * /etc/init.d/smb restart
案例7:
每月1、10、22日的4 : 45重啟smb
45 4 1,10,22 * * /etc/init.d/smb restart
案例8:
每周六、周日的1 : 10重啟smb
10 1 * * 6,0 /etc/init.d/smb restart
案例9:
每天18 : 00至23 : 00之間每隔30分鐘重啟smb
0,30 18-23 * * * /etc/init.d/smb restart
案例10:
每星期六的晚上11 : 00 pm重啟smb
0 23 * * 6 /etc/init.d/smb restart
案例11:
每一小時重啟smb
* */1 * * * /etc/init.d/smb restart
案例12:
晚上11點到早上7點之間,每隔一小時重啟smb
* 23-7/1 * * * /etc/init.d/smb restart
歡迎大家給予寶貴的意見或者建議。
歡迎大家補充或者共享一些其他的方法。
感謝支持。
5 * * * * youCommand
案例3:
在上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * * youCommand
案例4:
每隔兩天的上午8點到11點的第3和第15分鐘執行
3,15 8-11 */2 * * youCommand
案例5:
每周一上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * 1 youCommand
案例6:
每晚的21:30重啟smb
30 21 * * * /etc/init.d/smb restart
案例7:
每月1、10、22日的4 : 45重啟smb
45 4 1,10,22 * * /etc/init.d/smb restart
案例8:
每周六、周日的1 : 10重啟smb
10 1 * * 6,0 /etc/init.d/smb restart
案例9:
每天18 : 00至23 : 00之間每隔30分鐘重啟smb
0,30 18-23 * * * /etc/init.d/smb restart
案例10:
每星期六的晚上11 : 00 pm重啟smb
0 23 * * 6 /etc/init.d/smb restart
案例11:
每一小時重啟smb
* */1 * * * /etc/init.d/smb restart
案例12:
晚上11點到早上7點之間,每隔一小時重啟smb
* 23-7/1 * * * /etc/init.d/smb restart
歡迎大家給予寶貴的意見或者建議。
歡迎大家補充或者共享一些其他的方法。
感謝支持。