linux定时任务每小时_linux定时任务
第1章 定時任務(wù)介紹
1.1 什么是定時任務(wù)?
crond是linux系統(tǒng)中用來定期執(zhí)行命令或指定程序任務(wù)的一種服務(wù)或軟件。一般情況下,我們按裝完操作系統(tǒng)后,默認(rèn)遍會啟動crond服務(wù)調(diào)度服務(wù),在我們面前的系統(tǒng)安裝及開機(jī)啟動優(yōu)化設(shè)置中,我們也設(shè)置保留了crond開機(jī)啟動。crond服務(wù)會定期(默認(rèn)每分鐘檢查一次)檢查系統(tǒng)中是否有要執(zhí)行的任務(wù)工作。如果有。變會根據(jù)埼玉縣設(shè)定的定時任務(wù)規(guī)則執(zhí)行該定時任務(wù)。這個crond定時任務(wù)就相當(dāng)于我們平時早起使用的鬧鐘一樣。
特殊需求:crond服務(wù)搞不定了(如任務(wù)精確到秒),一般工作中寫腳本守護(hù)進(jìn)程執(zhí)行。
這里要求理解進(jìn)程、程序、守護(hù)進(jìn)程之前的關(guān)系。
1.2 linux系統(tǒng)crond的定時任務(wù)
linux系統(tǒng)中定時任務(wù)調(diào)度工作可以分為以下兩種情況:
1.2.1 linux系統(tǒng)自身定期執(zhí)行的任務(wù)工作:
系統(tǒng)周期性自行執(zhí)行的任務(wù)工作,如輪詢系統(tǒng)日志、備份系統(tǒng)數(shù)據(jù)、清理系統(tǒng)緩存等,這些任務(wù)無需我們認(rèn)為干預(yù)。如:
[root@oldboy ~]# ll /var/log/messages*
-rw-------? 1root root? 838513 Sep? 8 23:52 /var/log/messages
-rw-------. 1 root root? 496687 Aug 14 19:59/var/log/messages-20160814
-rw-------. 1 root root 1614991 Aug 21 12:14/var/log/messages-20160821
-rw-------? 1root root 1419878 Aug 28 08:45 /var/log/messages-20160828
-rw-------? 1root root 1104533 Sep? 4 11:22/var/log/messages-20160904
1.2.2?? 用戶執(zhí)行的任務(wù)工作:
某個用戶或系統(tǒng)管理員定期要做的任務(wù)工作,例如每隔5分鐘和互聯(lián)網(wǎng)上時間服務(wù)同步(這是安裝系統(tǒng)基礎(chǔ)優(yōu)化部分的內(nèi)容),每天晚上0點備份網(wǎng)站站點數(shù)據(jù)及數(shù)據(jù)庫數(shù)據(jù),一般這些工作需要由每個用戶自行設(shè)置才行。所謂的用戶就是讀者或者在做的小伙伴。
例如:服務(wù)器時間同步
[root@oldboy ~]# crontab -l
#time sync by hz at 2016-8-19
*/5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1
linux系統(tǒng)下定時任務(wù)軟件種類
1.3 linux系統(tǒng)下定時任務(wù)軟件
at,crontab,anacron.
at定時任務(wù),是一種臨時性的定時軟件,在命令行設(shè)置at定時任務(wù),只會執(zhí)行一次,然后失效。跟windows里cmd中的at定時任務(wù)類似。(不常用)
anacron定時任務(wù),該定時任務(wù)可以在系統(tǒng)關(guān)機(jī)后,將關(guān)機(jī)期間的沒有執(zhí)行的定時任務(wù)在開機(jī)的時候自動都執(zhí)行一遍。然而在生產(chǎn)環(huán)境中,服務(wù)器是不允許停機(jī)的,所以該服務(wù)基本上也不會用到。(幾乎不用)
crond定時任務(wù),該服務(wù)是生產(chǎn)環(huán)境普遍用到的定時任務(wù),可以精確到分鐘。在系統(tǒng)優(yōu)化中的精簡開機(jī)服務(wù)啟動項中將該服務(wù)保留,開機(jī)啟動。
第2章 定時任務(wù)crond使用說明
2.1 指令語法
crond定時任務(wù)的命令為crondtab,常用選項:
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
-u(user)執(zhí)行該定時任務(wù)的用戶
-l(list)查看定時任務(wù)列表
-e(edit)編輯定時任務(wù)
2.2 定時任務(wù)的文件
定時任務(wù)的執(zhí)行是由系統(tǒng)每隔一分鐘,系統(tǒng)自動掃描一次定時任務(wù)的定時文件,如果存在定時任務(wù),就執(zhí)行相應(yīng)的命令。
2.2.1 系統(tǒng)定時任務(wù)文件:
[root@oldboy ~]# cat /etc/crontab
SHELL=/bin/bash???????????????????????????? #默認(rèn)編輯器
PATH=/sbin:/bin:/usr/sbin:/usr/bin????????? #定時任務(wù)中的PATH黃金變量
MAILTO=root???????????????????????????????? #默認(rèn)生成文件的位置
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 beexecuted
系統(tǒng)定時任務(wù)有七部分組成:分、時、日、月、周、用戶和命令。
2.2.2 用戶的定時任務(wù)文件
用戶定時任務(wù)文件在/var/spool/cron/下,
如系統(tǒng)的定時任務(wù)文件:
cat /var/spool/cron/root
#time sync by hz at 2016-8-19
*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null2>&1
用戶的定時任務(wù)由六部分組成:分、時、日、月、周、命令。
查看系統(tǒng)定時任務(wù):
[root@oldboy ~]#crontab -l
#time sync by hz at 2016-8-19
*/5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1
編輯系統(tǒng)定時任務(wù):
[root@oldboy ~]# crontab -e
#time sync by hz at 2016-8-19
*/5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1
crontab -e編輯定時任務(wù)實際上就是將定時任務(wù)寫到定時任務(wù)文件/var/spool/cron/root中,也可以直接將定時任務(wù)追加到該文件中。crontab -e的用法好處是系統(tǒng)自動檢測語法是否錯誤。所以初學(xué)者建議用此方法。
2.3 定時任務(wù)中的時間表示
定時任務(wù)中的時間是由一些特殊的字符和數(shù)字以特殊的排序組成的。符號用法
**代表“每”的意思,在什么位置上就代表沒多長時間。
如:* * * * ?*?? 表示每分鐘
00 * * * * 表示每小時的整點
,“,”表示間隔的時間,當(dāng)時間不連續(xù)時,可以用逗號分隔開
如:15,30,45 * ?* * *?? 表示每小時的第15、30、45分鐘時執(zhí)行命令。
-“-”可以用來表示連續(xù)的時間段,從某一時間開始到某一時間結(jié)束。
如:00 ?23,01-07 * * *? 表示每天的晚上23點到第二天早上的7點的整點執(zhí)行命令。
/“/”表示每隔的意思,就是每隔多長時間。
如*/5 * * * *?? 表示每隔5分鐘執(zhí)行一次命令
注意與*的區(qū)別
第3章 定時任務(wù)案例練習(xí)
實例3-1
每隔五分鐘同步一次系統(tǒng)的時間
/5 * * * * /usr/sbin/ntpdate pool.ntp.org>/dev/null 2>&1
實例3-2
每分鐘執(zhí)行一次腳本/server/scripts/tar.sh
* * * * * /bin/sh /server/scripts/tar.sh>/dev/null 2>&1
實例3-3
每天晚上12點執(zhí)行腳本/bin/sh/server/scripts/tar_html.sh
00 00 * * * /bin/sh /bin/sh/server/scripts/tar_html.sh >/dev/null 2>&1
實例3-4
每個月的4號和每周的周一至周三的上午11點整重啟Apache服務(wù)
00?11?4?*?1-3?/oldboy/weberber/apache/bin/apachectl?restart
實例3-5
*23,00-07/1 * * * /application/apache/bin/apachectlgraceful
以上不是表示每天晚上的23點到第二天的早上七點每小時重啟一次Apache服務(wù)。
實際表達(dá)的意思是每分鐘執(zhí)行一次命令
若要表示每小時執(zhí)行一次重啟服務(wù)的正確寫法是:
00 23,00-07/1 * * * /application/apache/bin/apachectl graceful
第4章 企業(yè)書寫定時任務(wù)規(guī)范
在生產(chǎn)環(huán)境中,操作正確的重要性是不言而喻的。為了避免操作中的失誤,規(guī)范的操作流程是做到減少失誤的有效方法,下面以一個生產(chǎn)環(huán)境的案例來說明一下操作的正確流程。
4.1 實例演示規(guī)范操作
實例4-1規(guī)范定時任務(wù)案例:
每分鐘打包備份/etc/services文件一次到/tmp目錄下,要求打包文件不被覆蓋。
1、在命令行下測試成功
[root@oldboy ~]# cd /etc/
[root@oldboy /etc]# tar -zcf/tmp/services_backup$(date +%F-%H-%M).tar.gz services
[root@oldboy /etc]# ls/tmp/services_backup2016-09-09-22-37.tar.gz
/tmp/services_backup2016-09-09-22-37.tar.gz
2、將執(zhí)行命令寫入腳本
[root@oldboy ~]# mkdir -p /server/scripts/
[root@oldboy /etc]# vim/server/scripts/backup_services.sh
1#!/bin/bash
2 cd /etc/&&\
3 /bin/tar-zcf /tmp/services_backup$(date +%F-%H-%M).tar.gz services
將前面執(zhí)行成功的命令復(fù)制到腳本中,防止手動敲錯。
3、測試腳本
[root@oldboy /etc]# /bin/sh/server/scripts/backup_services.sh
[root@oldboy /etc]# ls/tmp/services_backup2016-09-09-22-*
/tmp/services_backup2016-09-09-22-37.tar.gz
/tmp/services_backup2016-09-09-22-43.tar.gz
測試腳本時要用全路徑,測試完成注意查看測試結(jié)果
4、編寫定時任務(wù)
[root@oldboy /etc]# crontab -l |tail -2
#backup services by crh at 2016-09-09
* * * * * /bin/sh/server/scripts/backup_services.sh >/dev/null 2>&1
注意定時任務(wù)的時間書寫格式,以及業(yè)務(wù)要求中的時間;
定時任務(wù)的命令要執(zhí)行直接復(fù)制命令行中執(zhí)行腳本的命令;
定時任務(wù)中執(zhí)行腳本后結(jié)果記得定向到/dev/null中;
寫完定時任務(wù)注意查看是否正確。
5、查看定時任務(wù)執(zhí)行效果
[root@oldboy /etc]# ls/tmp/services_backup2016-09-09-22-*
/tmp/services_backup2016-09-09-22-49.tar.gz
/tmp/services_backup2016-09-09-22-50.tar.gz
/tmp/services_backup2016-09-09-22-51.tar.gz
/tmp/services_backup2016-09-09-22-52.tar.gz
/tmp/services_backup2016-09-09-22-53.tar.gz
[root@oldboy /etc]# tail -f /var/log/cron
…………
Sep? 922:50:01 oldboy CROND[1542]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep? 922:51:01 oldboy CROND[1551]: (root) CMD (/bin/sh/server/scripts/backup_services.sh >/dev/null 2>&1)
Sep? 922:52:01 oldboy CROND[1557]: (root) CMD (/bin/sh/server/scripts/backup_services.sh >/dev/null 2>&1)
Sep? 922:53:01 oldboy CROND[1563]: (root) CMD (/bin/sh/server/scripts/backup_services.sh >/dev/null 2>&1)
查看執(zhí)行的結(jié)果是否正確;
跟蹤定時任務(wù)日志tail -f /var/log/cron查看狀態(tài)。
6、盡量多環(huán)境測試后在上產(chǎn)線。
個人的虛擬機(jī)測試à辦公室環(huán)境測試àIDC機(jī)房測試àIDC正式環(huán)境
4.2 定時任務(wù)規(guī)范操作步驟:
1、在命令行下測試成功
2、將執(zhí)行命令寫入腳本
3、測試腳本
4、編寫定時任務(wù)
5、查看定時任務(wù)執(zhí)行效果
6、盡量多環(huán)境測試后在上產(chǎn)線。
4.3 定時任務(wù)規(guī)范習(xí)慣
1、注釋【規(guī)范和習(xí)慣】
2、命令放腳本文件里
3、進(jìn)入目標(biāo)的上級目錄打包
4、命令在命令行測試好,然后復(fù)制后放入腳本
5、腳本文件要放在固定的規(guī)范的目錄/server/scripts
6、取消tar命令及腳本的無用輸出
7、腳本名字用.sh結(jié)尾
8、腳本前面要用/bin/sh執(zhí)行腳本,并且腳本也要全路徑
9、復(fù)制執(zhí)行的全路徑的腳本到定時任務(wù)里配置,或者配置好定時任務(wù)后,復(fù)制定時任務(wù)命令到命令行測試。
10、定時任務(wù)的結(jié)尾要加上>/dev/null 2>&1
第5章 企業(yè)案例
5.1 企業(yè)案例:inode被填滿的企業(yè)案例子。
郵件消息隊列文件
CentOS5???/var/spool/clientmquenue/
CentOS6????? /var/spool/postfix/maildrop/
和定時任務(wù)相關(guān)的原因:
在定時任務(wù)中,定時任務(wù)執(zhí)行出現(xiàn)錯誤,但是有沒有講錯誤輸出定向到/dev/null中,而且系統(tǒng)中的郵件服務(wù)有沒有開啟,導(dǎo)致系統(tǒng)報錯小文件堆積在郵件消息隊列文件下,占用完系統(tǒng)的inode。
解決辦法:
1、將郵件服務(wù)打開,
2、將定時任務(wù)的結(jié)果定向到/dev/null
5.2linux定時任務(wù)生產(chǎn)java服務(wù)無法執(zhí)行問題群友案例
分析:
conrd定時任務(wù)中的環(huán)境變量只包含了系統(tǒng)中的小部分,在執(zhí)行命令的時候如果沒有加全路徑或?qū)h(huán)境變量加入到腳本中,就會導(dǎo)致定時任務(wù)執(zhí)行失敗。所以在定時任務(wù)中執(zhí)行的命令要加上全路徑。在特殊情況下(Java)要將環(huán)境變量導(dǎo)入到執(zhí)行的腳本中。使得定時任務(wù)能夠正確執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的linux定时任务每小时_linux定时任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT公司岗位职责
- 下一篇: 下载安装linux RedHat