linux之循环执行任务
簡(jiǎn)介
? ?在linux下,crond服務(wù)是實(shí)現(xiàn)周期性計(jì)劃任務(wù)的工具之一,crond服務(wù)能在規(guī)定的時(shí)間去執(zhí)行設(shè)置的命令、腳本,功能類似windows下的“計(jì)劃任務(wù)”。對(duì)一個(gè)多用戶多任務(wù)的linux系統(tǒng)中,每個(gè)用戶都可以設(shè)置自己的crontab,并且在/var/spool/cron/這個(gè)目錄下會(huì)創(chuàng)建一個(gè)與創(chuàng)建計(jì)劃任務(wù)用戶同名的檔案,檔案的內(nèi)容就是此用戶使用“crontab -e”命令制作的計(jì)劃任務(wù)。而每一次計(jì)劃任務(wù)的執(zhí)行,crond都會(huì)把執(zhí)行的日志記錄到/var/log/cron這個(gè)日志檔案中,通過這個(gè)檔案就會(huì)知道在某個(gè)時(shí)間,crond程序執(zhí)行了哪個(gè)指令。作為系統(tǒng)管理員可以限定crontab的使用者,/etc/cron.allow與/etc/cron.deny這兩個(gè)檔案就是來(lái)做權(quán)限的設(shè)定的,一般只保留一個(gè)檔案即可,假如只保留/etc/cron.deny這個(gè)檔案,檔案中的內(nèi)容是一行一個(gè)用戶的用戶名,表示在這個(gè)檔案的用戶不能使用計(jì)劃任務(wù)的功能,而沒有在這個(gè)檔案內(nèi)的其他用戶則可以使用計(jì)劃任務(wù)的功能。
命令格式
? ?在制定計(jì)劃任務(wù)時(shí),我們使用crontab這個(gè)工具來(lái)設(shè)定,crontab的常用選項(xiàng)是“-e”與“-l”。
? ? ? ?-e:edit,表示編輯計(jì)劃任務(wù)列表
? ? ? ?-l:list,表示列出計(jì)劃任務(wù)列表
[root@zhaochj ~]# crontab -e計(jì)劃任務(wù)的設(shè)置會(huì)涉及到兩個(gè)要素:一是時(shí)間;二是指令。也就是在什么時(shí)間會(huì)執(zhí)行什么樣的指令。
cron的語(yǔ)法格式:五個(gè)時(shí)間字段,一個(gè)指令字段
? ?分 時(shí) 日 月 周 ? ? 指令
時(shí)間的取值范圍:
? ? ? ? ? ? ?field ? ? ? ? ?allowed values
? ? ? ? ? ? ?----- ? ? ? ? ?--------------
? ? ? ? ? ? ?minute ? ? ? ? 0-59
? ? ? ? ? ? ?hour ? ? ? ? ? 0-23
? ? ? ? ? ? ?day of month ? 1-31
? ? ? ? ? ? ?month ? ? ? ? ?1-12 (or names, see below)
? ? ? ? ? ? ?day of week ? ?0-7 (0 or 7 is Sun, or use names)
在這五個(gè)時(shí)間字段時(shí)可以使用一些特殊的符號(hào):
* :表示任何時(shí)刻
,:表示時(shí)間分割,比如在“分”這個(gè)字段里的值為“1,15”表示第一分,第15分兩個(gè)時(shí)刻
- :表示一個(gè)時(shí)間段,如在“時(shí)”這個(gè)字段里的值為“2-5”表示零晨2點(diǎn)到零晨5點(diǎn)這個(gè)時(shí)間范圍內(nèi)
/n:n表示一個(gè)整數(shù),如在“日”這個(gè)字段里的值為“*/1”表示每隔一天執(zhí)行一次命令
時(shí)間段的一些示例
43 21 * * * ? ? ? ? ? ? ?21:43 執(zhí)行
15 05 * * * ? ? ? ? ? ? ?05:15 執(zhí)行
0 17 * * * ? ? ? ? ? ? ? 17:00 執(zhí)行
0 17 * * 1 ? ? ? ? ? ? ? 每周一的 17:00 執(zhí)行
0,10 17 * * 0,2,3 ? ? ? ?每周日,周二,周三的 17:00和 17:10 執(zhí)行
0-10 17 1 * * ? ? ? ? ? ?毎月1日從 17:00到17:10 毎隔1分鐘 執(zhí)行
0 0 1,15 * 1 ? ? ? ? ? ? 毎月1日和 15日和周一的 0:00 執(zhí)行
42 4 1 * * ? ? ? ? 毎月1日的 4:42分 執(zhí)行
0 21 * * 1-6 ? ? ? ? 周一到周六 21:00 執(zhí)行
0,10,20,30,40,50 * * * * 每隔10分 執(zhí)行
*/10 * * * * 每隔10分 執(zhí)行
* 1 * * * 從1:0到1:59 每隔1分鐘 執(zhí)行
0 1 * * * ? ? ? ? ? ? ? ? 零晨1:00 執(zhí)行
0 */1 * * * 毎時(shí)0分 每隔1小時(shí) 執(zhí)行
0 * * * * 毎時(shí)0分 每隔1小時(shí) 執(zhí)行
2 8-20/3 * * * ? ? ? ? ? ?8:02,11:02,14:02,17:02,20:02 執(zhí)行
30 5 1,15 * * ? ? ? ? ? ? 每月1日 和 15日的 5:30 執(zhí)行
一個(gè)備份腳本與cron結(jié)合達(dá)到自動(dòng)備份的實(shí)例
備份腳本如下:
[root@zhaochj ~]# vim autoback.sh #!/bin/sh # #author: Jack.zhao #Date: 2013-11-29 #Email: 419775240@qq.com #Description: This script backup file DATE=$(/bin/date +%Y%m%d) BASENAME=$(basename $1) [ -d /backup ] || /bin/mkdir /backup /bin/tar -czf /backup/$BASENAME.$DATE.tar.gz $1 1> /dev/null 2>> /backup/$BASENAME.error.log if [ $? -eq 0 ]thenecho "$1 $DATE backup successfully" >> /backup/$BASENAME.success.logelseecho "ERROR:failure $1 $DATE backup!" >> /backup/$BASENAME.error.log fi[root@zhaochj ~]# chmod +x /root/autoback.sh此腳本的使用方法:
[root@zhaochj ~]# ./autoback.sh /etc/fstabefsg腳本準(zhǔn)備好了,那來(lái)設(shè)置計(jì)劃任務(wù),如果我們想對(duì)/home目錄做一個(gè)自動(dòng)備份工作,要求是每個(gè)月的1號(hào)、15號(hào)的零晨3點(diǎn)15分做備份工作:
[root@zhaochj ~]# crontab -e 15 3 1,15 * * /root/autoback.sh /home
轉(zhuǎn)載于:https://blog.51cto.com/zhaochj/1333747
總結(jié)
以上是生活随笔為你收集整理的linux之循环执行任务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS小功能(操作Table--动态添加删
- 下一篇: 【linux草鞋应用编程系列】_3_ 进