今天在一個項目里面,遇到一個故障:系統(tǒng)在做基于Weblogic的OA系統(tǒng)壓力測試中,并發(fā)的連接數(shù)非常的少(大大低于正常數(shù)),系統(tǒng)是采用紅旗的DC 4.1 for 安騰2版本,使用apache做web服務(wù)轉(zhuǎn)發(fā)。
后來經(jīng)過一系列的檢查,最后發(fā)現(xiàn)原來是之前連續(xù)兩天的壓力測試,導(dǎo)致擺放日志的/var目錄20G的空間都給占滿了;導(dǎo)致新的日志需要不斷的覆蓋舊日志,磁盤的讀寫頻繁,導(dǎo)致IO占用過大,所以并發(fā)連接數(shù)不能滿足要求。清空日志文件即可。
考慮到今后可能也會出現(xiàn)類似的問題(當(dāng)然,現(xiàn)實中不可能幾天就達到測試的結(jié)果),所以希望使用定時刪除日志的方法。這里就考慮到需要使用linux的計劃任務(wù),也叫例行性命令。
1、循環(huán)執(zhí)行的計劃任務(wù)
linux下面有atd和crond兩種計劃任務(wù),其中,atd服務(wù)使用的at命令只能執(zhí)行一次,而crond服務(wù)使用的crontab定義的命令,是循環(huán)作用的,所以crond才符合我們的要求。
crontab支持兩種狀態(tài):一、直接編寫計劃任務(wù);二、使用目錄的方式,放在目錄里面的都會定時執(zhí)行。
2、可以使用的用戶
默認(rèn)情況下,系統(tǒng)中可以登陸的用戶,都可以使用crontab定義計劃任務(wù)。不過,可以通過下面兩個文件限制權(quán)限:
※類似TCPWrapper定義的方式。
3、直接使用crontab編輯計劃任務(wù):
命令:
crontab [-u username] [-l|-e|-r]
參數(shù):
-u :通過-u幫其它使用者建立/移除 crontab;
-e :編輯 crontab 的內(nèi)容
-l :查看 crontab 的內(nèi)容
-r :移除 crontab 的所有內(nèi)容(是全部的內(nèi)容,如果只是刪除某個,用-e編輯即可)
內(nèi)容格式:
例如:
4、基于目錄的方式執(zhí)行計劃任務(wù)
對于系統(tǒng)的計劃任務(wù),已經(jīng)在/etc/crontab里面定義,采用的就是基于目錄的方式。系統(tǒng)會定時讀取該文件,并根據(jù)里面的定義執(zhí)行命令。
可以使用vi直接編寫/etc/crontab文件,其中格式如下:
可以看到前面的五個參數(shù)的定義和直接編輯計劃任務(wù)是一樣的,增加了執(zhí)行的用戶定義和run-parts參數(shù)。
run-parts后面跟的是目錄名稱,例如:/etc/cron.hourly,表示每小時01分就到/etc/cron.hourly目錄中執(zhí)行目錄下的所有可執(zhí)行文件;當(dāng)然,目錄是可以自己定義的。
如果你需要增加系統(tǒng)的計劃任務(wù),只需要在對應(yīng)的目錄添加執(zhí)行文件即可,例如:我需要在每天都執(zhí)行updatedb的操作,則我只需要把/usr/bin/updatedb的執(zhí)行命令鏈接到/etc/cron.daily目錄就可以了。
※同樣的,如果不需要使用目錄的方式,也可以使用如下的方式:
5、注意事項
◆如果使用crontab編輯計劃任務(wù)或直接修改/etc/crontab文件后,計劃任務(wù)沒有生效,可能需要重啟一下crond服務(wù):service crond restart
◆當(dāng)編寫/etc/crontab文件的時候,不要漏了指定執(zhí)行計劃任務(wù)的用戶,這是和直接用crontab -e編輯不同的。
◆某用戶(如root)用crontab -e編輯的計劃任務(wù)存放在/var/spool/cron/root,這個文件下。但最好不要直接編輯他,因為crond執(zhí)行的時候,會在/tmp目錄中建立需要的臨時文件,直接編輯會對此有影響,甚至出錯。
◆cron執(zhí)行的每一項工作都會被紀(jì)錄到/var/log/cron這個日志文件中,可以從這個文件查看命令執(zhí)行的狀態(tài)。
后來經(jīng)過一系列的檢查,最后發(fā)現(xiàn)原來是之前連續(xù)兩天的壓力測試,導(dǎo)致擺放日志的/var目錄20G的空間都給占滿了;導(dǎo)致新的日志需要不斷的覆蓋舊日志,磁盤的讀寫頻繁,導(dǎo)致IO占用過大,所以并發(fā)連接數(shù)不能滿足要求。清空日志文件即可。
考慮到今后可能也會出現(xiàn)類似的問題(當(dāng)然,現(xiàn)實中不可能幾天就達到測試的結(jié)果),所以希望使用定時刪除日志的方法。這里就考慮到需要使用linux的計劃任務(wù),也叫例行性命令。
1、循環(huán)執(zhí)行的計劃任務(wù)
linux下面有atd和crond兩種計劃任務(wù),其中,atd服務(wù)使用的at命令只能執(zhí)行一次,而crond服務(wù)使用的crontab定義的命令,是循環(huán)作用的,所以crond才符合我們的要求。
crontab支持兩種狀態(tài):一、直接編寫計劃任務(wù);二、使用目錄的方式,放在目錄里面的都會定時執(zhí)行。
2、可以使用的用戶
默認(rèn)情況下,系統(tǒng)中可以登陸的用戶,都可以使用crontab定義計劃任務(wù)。不過,可以通過下面兩個文件限制權(quán)限:
引用
◆/etc/cron.allow:
將可以使用 crontab 的賬號寫入其中,若不在這個檔案內(nèi)的使用者則不能使用 crontab;
◆/etc/cron.deny:
將不可以使用 crontab 的賬號寫入其中,若未記錄到這個檔案當(dāng)中的使用者,就可以使用 crontab 。
將可以使用 crontab 的賬號寫入其中,若不在這個檔案內(nèi)的使用者則不能使用 crontab;
◆/etc/cron.deny:
將不可以使用 crontab 的賬號寫入其中,若未記錄到這個檔案當(dāng)中的使用者,就可以使用 crontab 。
※類似TCPWrapper定義的方式。
3、直接使用crontab編輯計劃任務(wù):
命令:
crontab [-u username] [-l|-e|-r]
參數(shù):
-u :通過-u幫其它使用者建立/移除 crontab;
-e :編輯 crontab 的內(nèi)容
-l :查看 crontab 的內(nèi)容
-r :移除 crontab 的所有內(nèi)容(是全部的內(nèi)容,如果只是刪除某個,用-e編輯即可)
內(nèi)容格式:
* * * * * 命令
前面的五個*號,表示分、時、日、月、周,如:
代表意義 分鐘 小時 日期 月份 周
數(shù)字范圍 0-59 0-23 1-31 1-12 0-7
*號代表任何時間都接受的意思,任意。
*號之間用空格分開,如果是一段范圍,用-號連接;如果是隔開幾個時間,用,號表示。
另外,命令必須是編寫計劃任務(wù)的用戶有權(quán)限執(zhí)行的,并且最后用絕對路徑。
前面的五個*號,表示分、時、日、月、周,如:
代表意義 分鐘 小時 日期 月份 周
數(shù)字范圍 0-59 0-23 1-31 1-12 0-7
*號代表任何時間都接受的意思,任意。
*號之間用空格分開,如果是一段范圍,用-號連接;如果是隔開幾個時間,用,號表示。
另外,命令必須是編寫計劃任務(wù)的用戶有權(quán)限執(zhí)行的,并且最后用絕對路徑。
例如:
#crontab -e
59 23 1 5 * mail linuxing < /home/test.txt
每在5月1日,23點59分就把/home/test.txt的內(nèi)容作為郵件發(fā)給linuxing用戶
*/5 * * * * /opt/test.sh
每5分鐘就執(zhí)行一次/opt/test.sh腳本
0 3,6 * * * /usr/local/bin/test.sh
每在3點和6點整點都執(zhí)行/usr/local/bin/test.sh命令
0 8-12 * * * /root/backup.sh
8 點到 12 點之間的每小時的0分都執(zhí)行/root/backup.sh
59 23 1 5 * mail linuxing < /home/test.txt
每在5月1日,23點59分就把/home/test.txt的內(nèi)容作為郵件發(fā)給linuxing用戶
*/5 * * * * /opt/test.sh
每5分鐘就執(zhí)行一次/opt/test.sh腳本
0 3,6 * * * /usr/local/bin/test.sh
每在3點和6點整點都執(zhí)行/usr/local/bin/test.sh命令
0 8-12 * * * /root/backup.sh
8 點到 12 點之間的每小時的0分都執(zhí)行/root/backup.sh
4、基于目錄的方式執(zhí)行計劃任務(wù)
對于系統(tǒng)的計劃任務(wù),已經(jīng)在/etc/crontab里面定義,采用的就是基于目錄的方式。系統(tǒng)會定時讀取該文件,并根據(jù)里面的定義執(zhí)行命令。
可以使用vi直接編寫/etc/crontab文件,其中格式如下:
#cat /etc/crontab
SHELL=/bin/bash #使用的shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #預(yù)定義的PATH路徑
MAILTO=root #出現(xiàn)問題發(fā)Email給該用戶
HOME=/ #家目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly #每小時的目錄
02 4 * * * root run-parts /etc/cron.daily #每天
22 4 * * 0 root run-parts /etc/cron.weekly #每周日
42 4 1 * * root run-parts /etc/cron.monthly #每個月1號
分 時 日 月 周 執(zhí)行者身份 命令
SHELL=/bin/bash #使用的shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #預(yù)定義的PATH路徑
MAILTO=root #出現(xiàn)問題發(fā)Email給該用戶
HOME=/ #家目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly #每小時的目錄
02 4 * * * root run-parts /etc/cron.daily #每天
22 4 * * 0 root run-parts /etc/cron.weekly #每周日
42 4 1 * * root run-parts /etc/cron.monthly #每個月1號
分 時 日 月 周 執(zhí)行者身份 命令
可以看到前面的五個參數(shù)的定義和直接編輯計劃任務(wù)是一樣的,增加了執(zhí)行的用戶定義和run-parts參數(shù)。
run-parts后面跟的是目錄名稱,例如:/etc/cron.hourly,表示每小時01分就到/etc/cron.hourly目錄中執(zhí)行目錄下的所有可執(zhí)行文件;當(dāng)然,目錄是可以自己定義的。
如果你需要增加系統(tǒng)的計劃任務(wù),只需要在對應(yīng)的目錄添加執(zhí)行文件即可,例如:我需要在每天都執(zhí)行updatedb的操作,則我只需要把/usr/bin/updatedb的執(zhí)行命令鏈接到/etc/cron.daily目錄就可以了。
※同樣的,如果不需要使用目錄的方式,也可以使用如下的方式:
02 01 * * * root /root/test.sh
也就是沒有了run-parts,后面就直接跟命令的絕對路徑
也就是沒有了run-parts,后面就直接跟命令的絕對路徑
5、注意事項
◆如果使用crontab編輯計劃任務(wù)或直接修改/etc/crontab文件后,計劃任務(wù)沒有生效,可能需要重啟一下crond服務(wù):service crond restart
◆當(dāng)編寫/etc/crontab文件的時候,不要漏了指定執(zhí)行計劃任務(wù)的用戶,這是和直接用crontab -e編輯不同的。
◆某用戶(如root)用crontab -e編輯的計劃任務(wù)存放在/var/spool/cron/root,這個文件下。但最好不要直接編輯他,因為crond執(zhí)行的時候,會在/tmp目錄中建立需要的臨時文件,直接編輯會對此有影響,甚至出錯。
◆cron執(zhí)行的每一項工作都會被紀(jì)錄到/var/log/cron這個日志文件中,可以從這個文件查看命令執(zhí)行的狀態(tài)。
From: http://www.linuxfly.org/post/11/
1 執(zhí)行時間
分 時 日 月 天每星期
如果不需要指定的地方,可以用 * 來代表,否則就是指定的
也可以使用 */10 指定每10個單位
比如 */10 * * * * 表示每10分鐘執(zhí)行一次
分 時 日 月 天每星期
如果不需要指定的地方,可以用 * 來代表,否則就是指定的
也可以使用 */10 指定每10個單位
比如 */10 * * * * 表示每10分鐘執(zhí)行一次
引用
任務(wù)調(diào)度設(shè)置文件的寫法
其格式如下:
Minute Hour Day Month Dayofweek command
分鐘 小時 天 月 天每星期 命令
每個字段代表的含義如下:
Minute 每個小時的第幾分鐘執(zhí)行該任務(wù)
Hour 每天的第幾個小時執(zhí)行該任務(wù)
Day 每月的第幾天執(zhí)行該任務(wù)
Month 每年的第幾個月執(zhí)行該任務(wù)
DayOfWeek 每周的第幾天執(zhí)行該任務(wù)
Command 指定要執(zhí)行的程序
在這些字段里,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對于不指定的字段,要用“*”來填補其位置。
舉例如下:
1、指定每小時的第5分鐘執(zhí)行一次ls命令
5 * * * * ls
2、指定每天的 5:30 執(zhí)行l(wèi)s命令
30 5 * * * ls
3、指定每月8號的7:30分執(zhí)行l(wèi)s命令
30 7 8 * * ls
4、指定每年的6月8日5:30執(zhí)行l(wèi)s命令
30 5 8 6 * ls
5、指定每星期日的6:30執(zhí)行l(wèi)s命令
30 6 * * 0 ls
注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。
6、每月10號及20號的3:30執(zhí)行l(wèi)s命令
30 3 10,20 * * ls
注:“,”用來連接多個不連續(xù)的時段
7、每天8-11點的第25分鐘執(zhí)行l(wèi)s命令
25 8-11 * * * ls
注:“-”用來連接連續(xù)的時段
8、每15分鐘執(zhí)行一次ls命令
*/15 * * * * ls
即每個小時的第0 15 30 45 60分鐘執(zhí)行l(wèi)s命令
9、每個月中,每隔10天6:30執(zhí)行一次ls命令
30 6 */10 * * ls
即每月的1、11、21、31日是的6:30執(zhí)行一次ls命令。
10、每天7:50以root 身份執(zhí)行/etc/cron.daily目錄中的所有可執(zhí)行文件
50 7 * * * root run-parts /etc/cron.daily
注:run-parts參數(shù)表示,執(zhí)行后面目錄中的所有可執(zhí)行文件。
其格式如下:
Minute Hour Day Month Dayofweek command
分鐘 小時 天 月 天每星期 命令
每個字段代表的含義如下:
Minute 每個小時的第幾分鐘執(zhí)行該任務(wù)
Hour 每天的第幾個小時執(zhí)行該任務(wù)
Day 每月的第幾天執(zhí)行該任務(wù)
Month 每年的第幾個月執(zhí)行該任務(wù)
DayOfWeek 每周的第幾天執(zhí)行該任務(wù)
Command 指定要執(zhí)行的程序
在這些字段里,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對于不指定的字段,要用“*”來填補其位置。
舉例如下:
1、指定每小時的第5分鐘執(zhí)行一次ls命令
5 * * * * ls
2、指定每天的 5:30 執(zhí)行l(wèi)s命令
30 5 * * * ls
3、指定每月8號的7:30分執(zhí)行l(wèi)s命令
30 7 8 * * ls
4、指定每年的6月8日5:30執(zhí)行l(wèi)s命令
30 5 8 6 * ls
5、指定每星期日的6:30執(zhí)行l(wèi)s命令
30 6 * * 0 ls
注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。
6、每月10號及20號的3:30執(zhí)行l(wèi)s命令
30 3 10,20 * * ls
注:“,”用來連接多個不連續(xù)的時段
7、每天8-11點的第25分鐘執(zhí)行l(wèi)s命令
25 8-11 * * * ls
注:“-”用來連接連續(xù)的時段
8、每15分鐘執(zhí)行一次ls命令
*/15 * * * * ls
即每個小時的第0 15 30 45 60分鐘執(zhí)行l(wèi)s命令
9、每個月中,每隔10天6:30執(zhí)行一次ls命令
30 6 */10 * * ls
即每月的1、11、21、31日是的6:30執(zhí)行一次ls命令。
10、每天7:50以root 身份執(zhí)行/etc/cron.daily目錄中的所有可執(zhí)行文件
50 7 * * * root run-parts /etc/cron.daily
注:run-parts參數(shù)表示,執(zhí)行后面目錄中的所有可執(zhí)行文件。
From: http://blog.csdn.net/xrt95050/archive/2009/03/11/3980567.aspx