linux之循环执行任务
簡介
? ?在linux下,crond服務是實現(xiàn)周期性計劃任務的工具之一,crond服務能在規(guī)定的時間去執(zhí)行設置的命令、腳本,功能類似windows下的“計劃任務”。對一個多用戶多任務的linux系統(tǒng)中,每個用戶都可以設置自己的crontab,并且在/var/spool/cron/這個目錄下會創(chuàng)建一個與創(chuàng)建計劃任務用戶同名的檔案,檔案的內容就是此用戶使用“crontab -e”命令制作的計劃任務。而每一次計劃任務的執(zhí)行,crond都會把執(zhí)行的日志記錄到/var/log/cron這個日志檔案中,通過這個檔案就會知道在某個時間,crond程序執(zhí)行了哪個指令。作為系統(tǒng)管理員可以限定crontab的使用者,/etc/cron.allow與/etc/cron.deny這兩個檔案就是來做權限的設定的,一般只保留一個檔案即可,假如只保留/etc/cron.deny這個檔案,檔案中的內容是一行一個用戶的用戶名,表示在這個檔案的用戶不能使用計劃任務的功能,而沒有在這個檔案內的其他用戶則可以使用計劃任務的功能。
命令格式
? ?在制定計劃任務時,我們使用crontab這個工具來設定,crontab的常用選項是“-e”與“-l”。
? ? ? ?-e:edit,表示編輯計劃任務列表
? ? ? ?-l:list,表示列出計劃任務列表
[root@zhaochj ~]# crontab -e計劃任務的設置會涉及到兩個要素:一是時間;二是指令。也就是在什么時間會執(zhí)行什么樣的指令。
cron的語法格式:五個時間字段,一個指令字段
? ?分 時 日 月 周 ? ? 指令
時間的取值范圍:
? ? ? ? ? ? ?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)
在這五個時間字段時可以使用一些特殊的符號:
* :表示任何時刻
,:表示時間分割,比如在“分”這個字段里的值為“1,15”表示第一分,第15分兩個時刻
- :表示一個時間段,如在“時”這個字段里的值為“2-5”表示零晨2點到零晨5點這個時間范圍內
/n:n表示一個整數(shù),如在“日”這個字段里的值為“*/1”表示每隔一天執(zhí)行一次命令
時間段的一些示例
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 * * * 毎時0分 每隔1小時 執(zhí)行
0 * * * * 毎時0分 每隔1小時 執(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í)行
一個備份腳本與cron結合達到自動備份的實例
備份腳本如下:
[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腳本準備好了,那來設置計劃任務,如果我們想對/home目錄做一個自動備份工作,要求是每個月的1號、15號的零晨3點15分做備份工作:
[root@zhaochj ~]# crontab -e 15 3 1,15 * * /root/autoback.sh /home
轉載于:https://blog.51cto.com/zhaochj/1333747
總結
以上是生活随笔為你收集整理的linux之循环执行任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS小功能(操作Table--动态添加删
- 下一篇: file的getPath getAbso