新聞中心
如何在Linux 上實現(xiàn)定時任務(wù)的分頁執(zhí)行

創(chuàng)新互聯(lián)服務(wù)項目包括萬全網(wǎng)站建設(shè)、萬全網(wǎng)站制作、萬全網(wǎng)頁制作以及萬全網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,萬全網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到萬全省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
定時任務(wù)是Linux 系統(tǒng)管理員經(jīng)常用到的一種任務(wù)調(diào)度方式,可以讓系統(tǒng)按照預(yù)設(shè)的時間自動進(jìn)行一系列任務(wù)的執(zhí)行。但是對于大量數(shù)據(jù)處理的任務(wù)而言,一次性執(zhí)行可能會過于耗時,導(dǎo)致系統(tǒng)資源占用過多,甚至出現(xiàn)程序崩潰等情況。因此,如何在Linux 上實現(xiàn)定時任務(wù)的分頁執(zhí)行成為一項具有實用價值的技術(shù)。
一、什么是定時執(zhí)行任務(wù)
在Linux 上,定時執(zhí)行任務(wù)是通過Cron服務(wù)來實現(xiàn)的。Cron 服務(wù)是一個用于定時執(zhí)行程序或腳本的守護(hù)進(jìn)程,它會在指定的時間自動執(zhí)行指定的任務(wù)。 Cron 服務(wù)的配置文件為“/etc/crontab”和“/etc/cron.d/”,大部分的Linux 發(fā)行版都默認(rèn)包含了Cron 服務(wù)。
在Cron 服務(wù)中,用戶可以通過命令行輸入如下的命令行指令來編寫一個定時任務(wù):
$ crontab -e
在編輯器中輸入以下內(nèi)容后保存退出即可:
* * * * * /path/to/your/command
這個任務(wù)會每分鐘執(zhí)行一次。
二、如何實現(xiàn)定時任務(wù)的分頁執(zhí)行
對于需要處理大規(guī)模數(shù)據(jù)的任務(wù),如何分頁執(zhí)行成為一個重要的問題。以日志分析為例,如果一天的日志文件有幾百GB 的大小,一次性處理不僅效率低下,而且容易出現(xiàn)內(nèi)存占用過多,系統(tǒng)負(fù)載過重等問題。因此,我們需要將這個任務(wù)分隔成多個小任務(wù),并分頁執(zhí)行,以達(dá)到高速處理的目的。
1.分頁處理數(shù)據(jù)
將大規(guī)模的數(shù)據(jù)分頁處理成小文件,通常我們將大文件按照規(guī)定的頁數(shù)分解成多個小文件,然后分頁進(jìn)行處理。
假設(shè)我們需要處理一個20GB 的日志文件,我們可以將其分成100個小文件,每個小文件大小為200MB ,同時我們限制每次處理5個小文件(也就是1GB 的數(shù)據(jù))。
$ split -b 200M logfile.log
$ ls
logfile.log xaa xab xac ……..xaz
這樣我們就將其中一個20GB 的日志文件分成了100個200MB 的文件,文件名從xaa-xaz ,接下來就可以開始分頁進(jìn)行處理。
2.使用Shell 腳本進(jìn)行分頁執(zhí)行
當(dāng)我們需要將大規(guī)模數(shù)據(jù)分頁處理時,我們可以編寫Shell 腳本。通常,我們需要將每個小文件(頁)文件名進(jìn)行傳遞,并在腳本中按順序執(zhí)行每一頁。在每一頁處理完畢后,我們需要將處理結(jié)果記錄在一個日志文件中。我們需要將所有數(shù)據(jù)處理的日志文件打包成一個文件,方便存儲與查看。
#!/bin/sh
# 該腳本用于按頁執(zhí)行指定任務(wù)
# 定義日志文件名稱及路徑
logfile=task.log
logpath=/var/log/
# 定義數(shù)據(jù)文件路徑
datapath=/data/
# 定義每頁數(shù)據(jù)文件的大?。ㄗ止?jié)數(shù))
split_size=202315200
# 獲取所有小數(shù)據(jù)文件
filelist=`ls $datapath`
# 記錄處理過的頁數(shù)
pagenum=0
# 每次處理5頁數(shù)據(jù)
process_page=5
# 開始分頁執(zhí)行
for pagefile in $filelist
do
echo $(date ‘+%Y-%m-%d %H:%M:%S’) “開始處理數(shù)據(jù):” $pagefile >> $logpath/$logfile
# 處理當(dāng)前數(shù)據(jù)頁
process_stuff $datapath/$pagefile
# 記錄處理數(shù)據(jù)的日志
echo $(date ‘+%Y-%m-%d %H:%M:%S’) “處理數(shù)據(jù):” $pagefile “成功!” >> $logpath/$logfile
# 更新已經(jīng)處理的頁數(shù)
let pagenum+=1
# 判斷是否需要休眠
if [ $(($pagenum%$process_page)) -eq 0 ]; then
sleep 1m
echo $(date ‘+%Y-%m-%d %H:%M:%S’) “休眠1分鐘” >> $logpath/$logfile
fi
done
# 打包所有的處理日志
tar -zcf result.tar.gz $logpath/*.log
3.編寫定時任務(wù)
編寫完成Shell 腳本后,我們需要在Cron 中添加定時任務(wù)。通常我們將任務(wù)分頁執(zhí)行時間設(shè)置為凌晨,以避免影響系統(tǒng)的正常使用。
# 每天凌晨1點開始執(zhí)行分頁任務(wù)
0 1 * * * /data/run-task.sh
4.啟動Cron 服務(wù)并查看腳本執(zhí)行記錄
我們在Cron 中添加了新的任務(wù)后,需要啟動Cron 服務(wù),只需要輸入以下命令:
$ systemctl start cron
同時我們可以查看Cron 執(zhí)行記錄并檢查指定任務(wù)是否按分頁執(zhí)行。通過以下命令可以查看所有用戶的Cron 記錄:
$ grep CRON /var/log/syslog
在執(zhí)行完以上命令后,我們可以在日志記錄中找到對應(yīng)的任務(wù)執(zhí)行記錄。
結(jié)論:
以上就是如何在Linux 上實現(xiàn)定時任務(wù)的分頁執(zhí)行。在進(jìn)行大規(guī)模數(shù)據(jù)處理時,我們可以通過使用Shell 腳本和Cron 服務(wù),將數(shù)據(jù)任務(wù)分成多個小任務(wù)進(jìn)行分頁處理,以大幅提高處理的效率,同時避免出現(xiàn)內(nèi)存泄漏和系統(tǒng)負(fù)載過重等情況。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù)!
Linux crontab怎么定時執(zhí)行任務(wù)
crontab 需要由root用戶部署,“su – ” 切換到root;
”crontab -e” 進(jìn)入crontab 編輯狀態(tài);
輸入” * * * * * /usr/bin/bash /home/ganlin/ganlin.sh”, 這代表每秒執(zhí)行一次腳本。
部署完成后 輸入 ”crontab -l” 查看crontab 中所有部褲稿署的內(nèi)容;
腳本更好不要放在/home目錄下,行純老可以在腳本中檔升寫入一行標(biāo)準(zhǔn)輸出用來在部署完成后測試結(jié)果用。
“> /dev/null 2>&1“ 這樣寫得結(jié)果是就看不到標(biāo)準(zhǔn)輸出了, /dev/null 代表一個虛擬的設(shè)備 把標(biāo)準(zhǔn)輸出寫到一個不存在的設(shè)備中去了。
linux使用crontab實現(xiàn)PHP執(zhí)行計劃定時任務(wù)
首先說說cron,它是一個linux下的定時執(zhí)行工具。根用戶以外的用戶可以使用
crontab
工具來配置
cron
任務(wù)。所有用戶定義的
crontab
都被保存在/var/spool/cron
目錄中,并洞滑衡使用創(chuàng)建它們的用戶身份來執(zhí)行。要以某用戶身份創(chuàng)建一個
crontab
項目,登錄為該用戶,然后鍵入
crontab
-e
命令來編輯該用戶的
crontab。該文件使用的格式和
/etc/crontab
相同。當(dāng)對
crontab
所做的改變被保存后,該
crontab
文件就會根據(jù)該用戶名被保存,并寫入文件
/var/spool/cron/username
中。cron
守護(hù)進(jìn)程每分鐘都檢查
/etc/crontab
文件、etc/cron.d/
目錄、以及
/var/spool/cron
目錄中的改變。如果發(fā)現(xiàn)了改變,它們就會被載入內(nèi)存。這樣,當(dāng)某個
crontab
文件改變后就不必重新啟動守護(hù)進(jìn)程了。
安裝crontab:
yum
install
crontabs
說明:
/in/service
crond
start
//啟動服務(wù)
/in/service
crond
stop
//關(guān)閉服務(wù)
/in/service
crond
restart
//重啟服務(wù)
/in/service
crond
reload
//重新載入配置
查看crontab服務(wù)狀態(tài):service
crond
status
手動啟動crontab服務(wù):service
crond
start
查看crontab服務(wù)是否已設(shè)置為開機(jī)啟動,執(zhí)行命令:ntsysv
加入開機(jī)自動啟動:
chkconfig
–level
crond
on
crontab命令:
功能說明:設(shè)置計時器。
語 法:crontab
>
或
crontab
>
補充說明:cron是一個常駐服務(wù),它提供計時器的功能,讓用戶在特定的時間得讓渣以執(zhí)行預(yù)設(shè)的指令或程序。只要用戶會編輯計時器的配置文件,就可以使
用計時器的功能。其配置文件格式如下:
Minute
Hour
Day
Month
DayOFWeek
Command
參 數(shù):
-e
編輯該用戶的計時器設(shè)置。
-l
列出該用戶的計時器設(shè)置。
-r
刪除該用戶的計時器設(shè)置。
-u
指定要設(shè)定計時器的用戶名稱。
crontab
格式:
基本格式
:
分鐘
小時
日
月
星期
命令
*
*
* 納做
*
*
*
第1列表示分鐘1~59
每分鐘用*或者
*/1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列
表示月份1~12
第5列標(biāo)識號星期0~6(0表示星期天)
第6列要運行的命令
記住幾個特殊符號的含義:
“*”代表取值范圍內(nèi)的數(shù)字,
“/”代表”每”,
“-”代表從某個數(shù)字到某個數(shù)字,
“,”分開幾個離散的數(shù)字
#
Use
the
hash
sign
to
prefix
a
comment
#
+—————-
minute
(0
–
59)
#
|
+————-
hour
(0
–
23)
#
|
|
+———-
day
of
month
(1
–
31)
#
|
|
|
+——-
month
(1
–
12)
#
|
|
|
|
+—-
day
of
week
(0
–
7)
(Sunday=0
or
7)
#
|
|
|
|
|
#
*
*
*
*
*
command
to
be
executed
crontab幾個例子如下:
(1)之一個例子。
*
*
*
/etc/init.d/nginx
restart
每晚的21:30重啟
nginx。
(2)第二個例子,也就是本教程測試的例子
*
*
*
*
*
/usr/bin/php
-f
/root/test.php
>>
test.log
每一分鐘執(zhí)行/root/test.php文件,將結(jié)果輸出到test.log中。
完成了上面基礎(chǔ)工作后,就來看看怎么使用crontab定時執(zhí)行PHP腳本:
(1)我在/root下新建test.php文件,內(nèi)容如下:
復(fù)制代碼
代碼如下:
說明:你可以用whereis
php查找php執(zhí)行文件位置。
(2)然后crontab
-e編寫如下shell:
復(fù)制代碼
代碼如下:
*
*
*
*
*
/usr/bin/php
-f
/root/test.php
>>
test.log
說明:test.php必須為可執(zhí)行文件:chmod
+x
test.php
測試結(jié)果很正常,截圖如下:
當(dāng)然你可以用使用crontab
-e繼續(xù)添加任務(wù),在/var/spool/cron下你可以看到一個root文件。
關(guān)于linux定時任務(wù)分頁執(zhí)行的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!
當(dāng)前標(biāo)題:如何在Linux上實現(xiàn)定時任務(wù)的分頁執(zhí)行(linux定時任務(wù)分頁執(zhí)行)
文章分享:http://www.dlmjj.cn/article/cddossp.html


咨詢
建站咨詢
