摘要:linux系統(tǒng)則是由 cron (crond) 這個系統(tǒng)服務(wù)來控制的。Linux 系統(tǒng)上面原本就有非常多的計(jì)劃性工作,因此這個系統(tǒng)服務(wù)是默認(rèn)啟動的。另 外, 由于使用者自己也可以設(shè)置計(jì)劃任務(wù),所以, ...
linux系統(tǒng)則是由 cron (crond) 這個系統(tǒng)服務(wù)來控制的。Linux 系統(tǒng)上面原本就有非常多的計(jì)劃性工作,因此這個系統(tǒng)服務(wù)是默認(rèn)啟動的。另 外, 由于使用者自己也可以設(shè)置計(jì)劃任務(wù),所以, Linux 系統(tǒng)也提供了使用者控制計(jì)劃任務(wù)的crontab命令。
一.linux任務(wù)調(diào)度的工作主要分為以下兩類:
1.系統(tǒng)執(zhí)行的工作:系統(tǒng)周期性所要執(zhí)行的工作,如備份系統(tǒng)數(shù)據(jù)、清理緩存
2.個人執(zhí)行的工作:某個用戶定期要做的工作,例如每隔10分鐘檢查郵件服務(wù)器是否有新信,這些工作可由每個用戶自行設(shè)置。
在/etc目錄下有一個crontab文件,這個就是系統(tǒng)任務(wù)調(diào)度的配置文件:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- 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 # | | | | | # * * * * * user-name command to be executed
第一行SHELL變量指定了系統(tǒng)要使用哪個shell,這里是bash,第二行PATH變量指定了系統(tǒng)執(zhí)行 命令的路徑,第三行MAILTO變量指定了crond的任務(wù)執(zhí)行信息將通過電子郵件發(fā)送給root用戶,如果MAILTO變量的值為空,則表示不發(fā)送任務(wù) 執(zhí)行信息給用戶,第四行的HOME變量指定了在執(zhí)行命令或者腳本時使用的主目錄.
用戶任務(wù)調(diào)度:用戶定期要執(zhí)行的工作,比如用戶數(shù)據(jù)備份、定時郵件提醒等。用戶可以使用 crontab 工具來定制自己的計(jì)劃任務(wù)。所有用戶定義的crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致。
使用者權(quán)限文件:
文件:
/etc/cron.deny
說明:
該文件中所列用戶不允許使用crontab命令
文件:
/etc/cron.allow
說明:
該文件中所列用戶允許使用crontab命令
文件:
/var/spool/cron/
說明:
所有用戶crontab文件存放的目錄,以用戶名命名
crontab文件的含義:
用戶所建立的crontab文件中,每一行都代表一項(xiàng)任務(wù),每行的每個字段代表一項(xiàng)設(shè)置,它的格式共分為六個字段,前五段是時間設(shè)定段,第六段是要執(zhí)行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分鐘,可以是從0到59之間的任何整數(shù)。
hour:表示小時,可以是從0到23之間的任何整數(shù)。
day:表示日期,可以是從1到31之間的任何整數(shù)。
month:表示月份,可以是從1到12之間的任何整數(shù)。
week:表示星期幾,可以是從0到7之間的任何整數(shù),這里的0或7代表星期日。
command:要執(zhí)行的命令,可以是系統(tǒng)命令,也可以是自己編寫的腳本文件。
二.crontab命令選項(xiàng):
- u 指定一個用戶,
- l 列出某個用戶的任務(wù)計(jì)劃,
- r 刪除某個用戶的任務(wù),
- e 編輯某個用戶的任務(wù)
在末尾添加:*/1 * * * * date > /tmp/log.txt ,表示將日志輸出到這個文件中
在末尾添加:*/1 * * * * date > /dev/null 2>&1 可以理解為現(xiàn)在標(biāo)準(zhǔn)輸出直接輸入到 /dev/null 中,而2>&1是將標(biāo)準(zhǔn)錯誤重定向到標(biāo)準(zhǔn)輸出,所以當(dāng)程序產(chǎn)生錯誤的時候,相當(dāng)于錯誤流向左邊,而左邊依舊是輸入到/dev/null中
三、cron文件語法:
分 小時 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范圍,0表示周日一般一行對應(yīng)一個任務(wù))
記住幾個特殊符號的含義:
"*"代表取值范圍內(nèi)的數(shù)字,
"/"代表"每",
"-"代表從某個數(shù)字到某個數(shù)字,
","分開幾個離散的數(shù)字
舉幾個簡單例子:
5 * * * * ls //指定每小時的第5分鐘執(zhí)行一次ls命令 30 5 * * * ls //指定每天的 5:30 執(zhí)行l(wèi)s命令 30 7 8 * * ls //指定每月8號的7:30分執(zhí)行l(wèi)s命令 30 5 8 6 * ls //指定每年的6月8日5:30執(zhí)行l(wèi)s命令 30 6 * * 0 ls //指定每星期日的6:30執(zhí)行l(wèi)s命令[注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。] 30 3 10,20 * * ls //每月10號及20號的3:30執(zhí)行l(wèi)s命令[注:”,”用來連接多個不連續(xù)的時段] 25 8-11 * * * ls //每天8-11點(diǎn)的第25分鐘執(zhí)行l(wèi)s命令[注:”-”用來連接連續(xù)的時段] */15 * * * * ls //每15分鐘執(zhí)行一次ls命令 [即每個小時的第0 15 30 45 60分鐘執(zhí)行l(wèi)s命令 ] 30 6 */10 * * ls //每個月中,每隔10天6:30執(zhí)行一次ls命令[即每月的1、11、21、31日是的6:30執(zhí)行一次ls命令。 ] 50 7 * * * root run-parts /etc/cron.daily //每天7:50以root 身份執(zhí)行/etc/cron.daily目錄中的所有可執(zhí)行文件[ 注:run-parts參數(shù)表示,執(zhí)行后面目錄中的所有可執(zhí)行文件。 ]
四、crontab在YZMPHP框架中的使用例子:
sudo crontab -e * * * * * /usr/local/bin/php /data1/yzmcms/yzm task run > /dev/null 2>&1
上例子表示Linux每分鐘執(zhí)行一個YZMPHP的命令,更多YZMPHP使用方式見:www.yzmcms.com
網(wǎng)友評論:
不錯
2019-01-08 16:45:40 回復(fù)