PHP制作定時任務(wù)(也稱計劃任務(wù))的方法,大概分為2種:
創(chuàng)新互聯(lián)專注于平南企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),購物商城網(wǎng)站建設(shè)。平南網(wǎng)站建設(shè)公司,為平南等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站建設(shè),專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
現(xiàn)在基本所有的PHP框架,如:ThinkPHP,Yii,Laravel等等;它們都是單入口的形式,也就是說所有的請求都集合到index.php中,然后再由框架核心來根據(jù)請求參數(shù)的不同來分配到不同的控制器當(dāng)中。基于單入口的形式,那么就可以做基于行為(例如TP3.2)或者說基于事件的定時任務(wù)。
系統(tǒng)自動的定時任務(wù),比如Linux的crontab,windows的計劃任務(wù)等。
兩中方法各有所長各有所短
基于事件:這種利用的是框架本身提供的一些行為來實(shí)現(xiàn),優(yōu)點(diǎn)是:不需要特殊配置,只要項目能跑起來,那么定時任務(wù)也能執(zhí)行。缺點(diǎn)是:靈活性比較差,必須要借助框架實(shí)現(xiàn)。
基于系統(tǒng):基于操作系統(tǒng)來實(shí)現(xiàn),優(yōu)點(diǎn)是:靈活性很高,而且可控性也很好。缺點(diǎn)是:需要特殊配置,專業(yè)要求性比較強(qiáng)。
具體要使用哪種方法,可以依據(jù)自己的能力和項目需要來選擇。最后附上TP3.2的定時任務(wù)配置,這個只需要配置就可以,如果想查看具體實(shí)現(xiàn)原理,可以查看/ThinkPHP/Library/Behavior/CronRunBehavior.class.php
第一步:/Application/Common/Conf目錄下新建兩個文件:
分別如:
/Application/Common/Conf/tags.php
/Application/Common/Conf/crons.php
1)?新建?tags.php,編輯內(nèi)容如下:
return?array(
'app_end'?=?array('Behavior\CronRunBehavior'),
);
2)?新建?crons.php?,編輯內(nèi)容如下:
return?array(
'cron_1'?=?array('myplan',?1),
);
第二步:/Application/目錄下新建?Cron文件夾,里面新建文件myplan.php文件
路徑如:/Application/Cron/myplan.php
編輯內(nèi)容如下:
echo?11111;
查看是否運(yùn)行成功,最簡單的方法是查看/Application/Runtime/~crons.php,這個文件是否存在。
linux自動備份網(wǎng)站和數(shù)據(jù)庫,到另外服務(wù)器上,為當(dāng)前用戶創(chuàng)建定時任務(wù)兩臺服務(wù)器111,和117服務(wù)器,每天完成111服務(wù)器上網(wǎng)站和數(shù)據(jù)庫自動備份到117服務(wù)器上1:我的111服務(wù)器上是當(dāng)前用戶:sxA:
查看當(dāng)前用戶的計劃任務(wù):crontab
-l是查看當(dāng)前用戶的任務(wù)用
vi
crontab
-e
是為sxw用戶創(chuàng)建一個計劃任務(wù)第一行:每天3點(diǎn)運(yùn)行/home/sxw/rsync201.sh
shell腳本,第二行:和第三行是每天下午7點(diǎn)運(yùn)行tar包,gaokaotong和phpcms文件第三行:每天7點(diǎn)22分運(yùn)行/homesxw/back_up.sh
shell腳本,注意:這里是當(dāng)前用戶sxw,所以要shell腳本路徑要有用戶sxw權(quán)限,在這里/home/sxw/back_up
shell腳本,是當(dāng)前用戶sxw用戶的家目錄。B:
111服務(wù)器上/home/sxw/back_up.sh腳本code:-bash-3.2$
vim
/home/sxw/back_up.sh#!/bin/shecho
開始備份數(shù)據(jù)庫mysqldump
-u
jeecms
-pjeecms1234
gktcms
gktcms.sqlmysqldump
-u
jeecms
-pjeecms1234
phpcms
phpcms.sqlecho
備份數(shù)據(jù)庫完成,復(fù)制到117服務(wù)器端scp
-P
10022
gktcms.sql
zk@114.113.145.117:/home/zkscp
-P
10022
phpcms.sql
zk@114.113.145.117:/home/zkscp
-r
-P
10022
/opt/www/www2/phpcms.tar.gz
zk@114.113.145.117:/home/zk/scp
-r
-P
10022
/opt/www/www2/gaokaotong.tar.gz
zk@114.113.145.117:/home/zk/echo
發(fā)送完成C:
還要在111上做ssh信任,這個可參照ssh資料。很簡單,只需要建立兩個密鑰。2:
117服務(wù)器上/homezk/自動就會多出兩個tar包文件,phpcms.tar.gz
和gaokaotong.tar.gz這里每天自動保存兩個文件,phpcms.tar.gz
和
gaokaotong.tar.gz文件
這里做了一個shell腳本,保存前兩天的文件,跟上述111服務(wù)器上的建立計劃任務(wù)一樣:A:
查看117的計劃任務(wù):
crontabl
-lB:
在查看/home/zk/back.sh
的shell編寫code:[zk@DB2~]$
vi
/home/zk/back.sh#!/bin/shTARFILE=/home/zk/phpcms.tar.gzif
[
-f
$TARFILE
];then
mv
/home/zk/phpcms.tar.gz
/home/zk/phpcms_$(date
+%Y%m%d).tar.gz
#remove
date
file
DATE_B=$(date
-d2
day
ago
+%Y%m%d)
FILENAME=/home/zk/phpcms_$DATE_B.tar.gz
if
[
-f
$FILENAME
];then
rm
-rf
/home/zk/phpcms_$DATE_B.tar.gz
else
echo
沒有可刪除文件
fielse
echo
沒有源文件fi~
結(jié)束。
$msgs[]="服務(wù)器備份目錄為backup";
$msgs[]="對于較大的數(shù)據(jù)表,強(qiáng)烈建議使用分卷備份";
$msgs[]="只有選擇備份到服務(wù)器,才能使用分卷備份功能";
show_msg($msgs);
1、查看磁盤空間情況:
既然是定時備份,就要選擇一個空間充足的磁盤空間,避免出現(xiàn)因空間不足導(dǎo)致備份失敗,數(shù)據(jù)丟失的惡果!
存儲到當(dāng)前磁盤這是最簡單,卻是最不推薦的;服務(wù)器有多塊硬盤,最好是把備份存放到另一塊硬盤上;有條件就選擇更好更安全的存儲介質(zhì);
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 46G 1.6G 97% /
tmpfs 1.9G 92K 1.9G 1% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/dev/mapper/VolGroup-lv_home 534G 3.6G 503G 1% /home123456123456
2、創(chuàng)建備份目錄:
上面我們使用命令看出/home下空間比較充足,所以可以考慮在/home保存?zhèn)浞菸募?/p>
cd /home
mkdir backup
cd backup123123
3、創(chuàng)建備份Shell腳本:
注意把以下命令中的DatabaseName換為實(shí)際的數(shù)據(jù)庫名稱;
當(dāng)然,你也可以使用其實(shí)的命名規(guī)則!
vi bkDatabaseName.sh11
輸入/粘貼以下內(nèi)容:
#!/bin/bash
mysqldump -uusername -ppassword DatabaseName /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql1212
對備份進(jìn)行壓縮:
#!/bin/bash
mysqldump -uusername -ppassword DatabaseName | gzip /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz1212
注意:
把 username 替換為實(shí)際的用戶名;
把 password 替換為實(shí)際的密碼;
把 DatabaseName 替換為實(shí)際的數(shù)據(jù)庫名;
4、添加可執(zhí)行權(quán)限:
chmod u+x bkDatabaseName.sh11
添加可執(zhí)行權(quán)限之后先執(zhí)行一下,看看腳本有沒有錯誤,能不能正常使用;
./bkDatabaseName.sh11
5、添加計劃任務(wù)
檢測或安裝 crontab
確認(rèn)crontab是否安裝:
執(zhí)行 crontab 命令如果報 command not found,就表明沒有安裝
# crontab
-bash: crontab: command not found
一. 簡單
?php
ignore_user_abort();//關(guān)掉瀏覽器,PHP腳本也可以繼續(xù)執(zhí)行.
set_time_limit(0);// 通過set_time_limit(0)可以讓程序無限制的執(zhí)行下去
ini_set('memory_limit','512M'); // 設(shè)置內(nèi)存限制
$interval=60*30;// 每隔半小時運(yùn)行
do{
//ToDo
sleep($interval);// 等待5分鐘
}
while(true);
二. 簡單 可控型
config.php
?php
return 1;
?
cron.php
ignore_user_abort();//關(guān)掉瀏覽器,PHP腳本也可以繼續(xù)執(zhí)行.
set_time_limit(0);// 通過set_time_limit(0)可以讓程序無限制的執(zhí)行下去
$interval=60*30;// 每隔半小時運(yùn)行
do{
$run = include 'config.php';
if(!$run) die('process abort');
//ToDo
sleep($interval);// 等待5分鐘
}
while(true);
三. 簡單 改進(jìn)型
?php
$time=15;
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
/*
function
*/
sleep($time);
file_get_contents($url);
?
數(shù)據(jù)庫的自動備份,可以減輕維護(hù)者的工作量也便于系統(tǒng)恢復(fù),對于比較重要的數(shù)據(jù)庫,最好還是設(shè)置下自動備份。
工具/原料
navicat for mysql
mysql 5.5
方法/步驟
打開navicat客戶端,連上mysql后,雙擊左邊你想要備份的數(shù)據(jù)庫。點(diǎn)擊“計劃”,再點(diǎn)擊“新建批處理作業(yè)”。
雙擊上面的可用任務(wù),它就會到下面的列表里去,代表你選擇了這個任務(wù)。
點(diǎn)擊保存,彈出個命名對話框,給這個任務(wù)取個名字,點(diǎn)擊“確定”
點(diǎn)擊“設(shè)置”計劃任務(wù)。
彈出的對話框,選擇“計劃”,再點(diǎn)擊“新建”。
這里設(shè)置為從2014年1月24號起每天早上九點(diǎn)備份該數(shù)據(jù)庫。如果想提高備份頻率、或者設(shè)置備份截止日期,請點(diǎn)擊“高級”。
高級選項可以把備份設(shè)置的更精細(xì),比如這里設(shè)置的是在24小時內(nèi)每隔2小時就備份一次。加上前面的基本設(shè)置,任務(wù)計劃就是:從2014年1月24號開始,每天九點(diǎn),每隔2小時備份一次,每天的備份都持續(xù)24小時。
最后,輸入電腦密碼就大功告成。