php定時執行任務
❶ php怎麼做定時任務的,感謝大牛指點
寫一個你需要的php業務的腳本,然後在伺服器上,設置定時任務,執行這個腳本,就行了
❷ thinkphp6定時任務,php定時器EasyTask
本教程使用的定時任務基於EasyTak,EasyTask官方文檔: https://gitee.com/392223903/EasyTask
(1).安裝tp6
(2).安裝定時任務composer包
(3).創建命令行處理類文件
會生成文件:tp\app\command\Task.php
將Task.php文件內容修改如下:
(4).配置tp\config\console.php文件
(5).執行命令(windows請使用cmd):
❸ ThinkPHP怎麼做定時任務
這個功能用伺服器上面的定時任務做吧,
非得用php也可以做,使用
set_time_limit(0);
ignore_user_abort(true);
寫一個死循環,sleep(1),每秒執行一次,具體業務邏輯你自己寫,建議這個php程序,依賴一些外部數據來維持,每執行一次,然後記錄執行次數到資料庫,或者文件里,每次執行讀取這個執行次數記錄,用來控製程序的執行個數(因為這個程序算是永久進程,除非伺服器重啟了),除了控制執行次數,也要增加一個文件,資料庫記錄,來記錄一個狀態,每次程序執行同時去檢查這個狀態,如果是1,則執行,如果是0則程序終止,並且前面的執行次數-1,。這樣就可以手動結束這些永久php進程了,同時也可以寫一些日誌,來觀察程序的運行狀況
❹ php定時執行任務怎麼寫
藉助crontab來編寫;
編寫定時執行腳本(單獨的一個php文件,或者某個方法);
配置crontab,指定執行路徑地址;
啟動crontab服務即可。
❺ linux使用crontab實現PHP執行計劃定時任務
首先說說cron,它是一個linux下的定時執行工具。根用戶以外的用戶可以使用
crontab
工具來配置
cron
任務。所有用戶定義的
crontab
都被保存在/var/spool/cron
目錄中,並使用創建它們的用戶身份來執行。要以某用戶身份創建一個
crontab
項目,登錄為該用戶,然後鍵入
crontab
-e
命令來編輯該用戶的
crontab。該文件使用的格式和
/etc/crontab
相同。當對
crontab
所做的改變被保存後,該
crontab
文件就會根據該用戶名被保存,並寫入文件
/var/spool/cron/username
中。cron
守護進程每分鍾都檢查
/etc/crontab
文件、etc/cron.d/
目錄、以及
/var/spool/cron
目錄中的改變。如果發現了改變,它們就會被載入內存。這樣,當某個
crontab
文件改變後就不必重新啟動守護進程了。
安裝crontab:
yum
install
crontabs
說明:
/sbin/service
crond
start
//啟動服務
/sbin/service
crond
stop
//關閉服務
/sbin/service
crond
restart
//重啟服務
/sbin/service
crond
reload
//重新載入配置
查看crontab服務狀態:service
crond
status
手動啟動crontab服務:service
crond
start
查看crontab服務是否已設置為開機啟動,執行命令:ntsysv
加入開機自動啟動:
chkconfig
–level
35
crond
on
crontab命令:
功能說明:設置計時器。
語法:crontab
[-u
<用戶名稱>][配置文件]
或
crontab
[-u
<用戶名稱>][-elr]
補充說明:cron是一個常駐服務,它提供計時器的功能,讓用戶在特定的時間得以執行預設的指令或程序。只要用戶會編輯計時器的配置文件,就可以使
用計時器的功能。其配置文件格式如下:
Minute
Hour
Day
Month
DayOFWeek
Command
參數:
-e
編輯該用戶的計時器設置。
-l
列出該用戶的計時器設置。
-r
刪除該用戶的計時器設置。
-u<用戶名稱>
指定要設定計時器的用戶名稱。
crontab
格式:
基本格式
:
分鍾
小時
日
月
星期
命令
*
*
*
*
*
*
第1列表示分鍾1~59
每分鍾用*或者
*/1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列
表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令
記住幾個特殊符號的含義:
「*」代表取值范圍內的數字,
「/」代表」每」,
「-」代表從某個數字到某個數字,
「,」分開幾個離散的數字
#
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)第一個例子。
30
21
*
*
*
/etc/init.d/nginx
restart
每晚的21:30重啟
nginx。
(2)第二個例子,也就是本教程測試的例子
*
*
*
*
*
/usr/bin/php
-f
/root/test.php
>>
test.log
每一分鍾執行/root/test.php文件,將結果輸出到test.log中。
完成了上面基礎工作後,就來看看怎麼使用crontab定時執行PHP腳本:
(1)我在/root下新建test.php文件,內容如下:
復制代碼
代碼如下:
<?php
#!/usr/bin/php
-q
echo
date('Y-m-d
H:i:s')."from
http://www.phpddt.com
";
?>
說明:你可以用whereis
php查找php執行文件位置。
(2)然後crontab
-e編寫如下shell:
復制代碼
代碼如下:
*
*
*
*
*
/usr/bin/php
-f
/root/test.php
>>
test.log
說明:test.php必須為可執行文件:chmod
+x
test.php
測試結果很正常,截圖如下:
當然你可以用使用crontab
-e繼續添加任務,在/var/spool/cron下你可以看到一個root文件。
windows下直接用windows計劃任務,通過bat打開網頁就可以了。不像linux這么復制。
❻ php如何定時執行任務
php是沒有定時任務的說法吧,而且php是要訪問才會執行,有可能同時很多人訪問,這個時候還要判斷下是不是已經執行過,比較麻煩的。
我都是用mysql的定時任務,先創建執行的存儲過程,然後創建定時事件去執行存儲過程
❼ PHP實現定時任務的幾種方式
一. 簡單
<?php
ignore_user_abort();//關掉瀏覽器,PHP腳本也可以繼續執行.
set_time_limit(0);// 通過set_time_limit(0)可以讓程序無限制的執行下去
ini_set('memory_limit','512M'); // 設置內存限制
$interval=60*30;// 每隔半小時運行
do{
//ToDo
sleep($interval);// 等待5分鍾
}
while(true);
二. 簡單 可控型
config.php
<?php
return 1;
?>
cron.php
ignore_user_abort();//關掉瀏覽器,PHP腳本也可以繼續執行.
set_time_limit(0);// 通過set_time_limit(0)可以讓程序無限制的執行下去
$interval=60*30;// 每隔半小時運行
do{
$run = include 'config.php';
if(!$run) die('process abort');
//ToDo
sleep($interval);// 等待5分鍾
}
while(true);
三. 簡單 改進型
<?php
$time=15;
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
/*
function
*/
sleep($time);
file_get_contents($url);
?>
❽ PHP能否自動定時執行某代碼
可以試一下在js裡面寫個判斷,當前時間大於或者等於某個時間段去執行你php裡面方法的程序。
❾ php如何每天定時執行
php做不到每天定時執行,只有java或者c可以,因為php是不訪問頁面就不會動得代碼,但是有一個方法可以曲線救國
你寫一個頁面是你要每天定時執行的頁面,然後視你的操作系統而言,做定時任務,定時去訪問這個頁面
如果是windows請使用任務計劃功能
如果是linux請使用定時任務Cron,在定時的時候使用curl來訪問你那個頁面。以下我只貼出linux的解決方案,因為一般伺服器都是linux的,windows的大家都會
=========================linux cron 入門 ============================
Linux操作系統定時任務系統 Cron 入門
cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。由於Cron 是Linux的內置服務,但它不自動起來,可以用以下的方法啟動、關閉這個服務:
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
你也可以將這個服務在系統啟動的時候自動啟動:
在/etc/rc.d/rc.local這個腳本的末尾加上:
/sbin/service crond start
現在Cron這個服務已經在進程裡面了,我們就可以用這個服務了,Cron服務提供以下幾種介面供大家使用:
1.直接用crontab命令編輯
cron服務提供crontab命令來設定cron服務的,以下是這個命令的一些參數與說明:
crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab -l //列出某個用戶cron服務的詳細內容
crontab -r //刪除沒個用戶的cron服務
crontab -e //編輯某個用戶的cron服務
比如說root查看自己的cron設置:crontab -u root -l
再例如,root想刪除fred的cron設置:crontab -u fred -r
在編輯cron服務時,編輯的內容有一些格式和約定,輸入:crontab -u root -e
進入vi編輯模式,編輯的內容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
任務調度的crond常駐命令
crond 是linux用來定期執行程序的命令。當安裝完成操作系統之後,默認便會啟動此任務調度命令。crond命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
1、linux任務調度的工作主要分為以下兩類:
*系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存
*個人執行的工作:某個用戶定期要做的工作,例如每隔10分鍾檢查郵件伺服器是否有新信,這些工作可由每個用戶自行設置。
2.crontab命令選項:
-u指定一個用戶,
-l列出某個用戶的任務計劃,
-r刪除某個用戶的任務,
-e編輯某個用戶的任務
3.cron文件語法:
分 小時 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范圍,0表示周日一般一行對應一個任務)
4.記住幾個特殊符號的含義:
"*"代表取值范圍內的數字,
"/"代表"每",
"-"代表從某個數字到某個數字,
","分開幾個離散的數字
一、任務調度設置文件的寫法
可用crontab -e命令來編輯,編輯的是/var/spool/cron下對應用戶的cron文件,也可以直接修改/etc/crontab文件
具體格式如下:
Minute Hour Day Month Dayofweek command
分鍾 小時 天 月 天每星期 命令
每個欄位代表的含義如下:
Minute 每個小時的第幾分鍾執行該任務
Hour 每天的第幾個小時執行該任務
Day 每月的第幾天執行該任務
Month 每年的第幾個月執行該任務
DayOfWeek 每周的第幾天執行該任務
Command 指定要執行的程序
在這些欄位里,除了「Command」是每次都必須指定的欄位以外,其它欄位皆為可選欄位,可視需要決定。對於不指定的欄位,要用「*」來填補其位置。
舉例如下:
5 * * * * ls 指定每小時的第5分鍾執行一次ls命令
30 5 * * * ls 指定每天的 5:30 執行ls命令
30 7 8 * * ls 指定每月8號的7:30分執行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30執行ls命令
30 6 * * 0 ls 指定每星期日的6:30執行ls命令[註:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10號及20號的3:30執行ls命令[註:「,」用來連接多個不連續的時段]
25 8-11 * * * ls 每天8-11點的第25分鍾執行ls命令[註:「-」用來連接連續的時段]
*/15 * * * * ls 每15分鍾執行一次ls命令 [即每個小時的第0 15 30 45 60分鍾執行ls命令 ]
30 6 */10 * * ls 每個月中,每隔10天6:30執行一次ls命令[即每月的1、11、21、31日是的6:30執行一次ls命令。 ]
每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行文件
50 7 * * * root run-parts /etc/cron.daily [ 註:run-parts參數表示,執行後面目錄中的所有可執行文件。 ]
二、新增調度任務
新增調度任務可用兩種方法:
1、在命令行輸入: crontab -e 然後添加相應的任務,wq存檔退出。
2、直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應的任務。
三、查看調度任務
crontab -l //列出當前的所有調度任務
crontab -l -u jp //列出用戶jp的所有調度任務
四、刪除任務調度工作
crontab -r //刪除所有任務調度工作
五、任務調度執行結果的轉向
例1:每天5:30執行ls命令,並把結果輸出到/jp/test文件中
30 5 * * * ls >/jp/test 2>&1
註:2>&1 表示執行結果及錯誤信息。
編輯/etc/crontab 文件配置cron
cron服務每分鍾不僅要讀一次/var/spool/cron內的所有文件,還需要讀一次/etc/crontab,因此我們配置這個文件也能運用cron服務做一些事情。用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務。此文件的文件格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號
HOME=/ //使用者運行的路徑,這里是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly內的腳本
02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily內的腳本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行/etc/cron.weekly內的腳本
42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly內的腳本
大家注意"run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要運行的某個腳本名,而不是文件夾名了
例如: 1、在命令行輸入: crontab -e 然後添加相應的任務,wq存檔退出。
2、直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應的任務
11 2 21 10 * rm -rf /mnt/fb
❿ php discuz的定時任務是什麼原理怎麼實現的求高手解答
php中定時計劃任務的實現原理:
當 PHP 腳本正常地運行 NORMAL 狀態時,連接為有效。當遠程客戶端中斷連接時,ABORTED 狀態的標記將會被打開。遠程客戶端連接的中斷通常是由用戶點擊 STOP 按鈕導致的。當連接時間超過 PHP 的時限時,TIMEOUT 狀態的標記將被打開。
示例代碼:
<?php
ignore_user_abort(true);set_time_limit(0);
date_default_timezone_set('PRC'); // 切換到中國的時間
$run_time = strtotime('+1 day'); // 定時任務第一次執行的時間是明天的這個時候
$interval = 3600*12; // 每12個小時執行一次
if(!file_exists(dirname(__FILE__).'/cron-run')) exit(); // 在目錄下存放一個cron-run文件,如果這個文件不存在,說明已經在執行過程中了,該任務就不能再激活,執行第二次,否則這個文件被多次訪問的話,伺服器就要崩潰掉了
do {
if(!file_exists(dirname(__FILE__).'/cron-switch')) break; // 如果不存在cron-switch這個文件,就停止執行,這是一個開關的作用
$gmt_time = microtime(true); // 當前的運行時間,精確到0.0001秒
$loop = isset($loop) && $loop ? $loop : $run_time - $gmt_time; // 這里處理是為了確定還要等多久才開始第一次執行任務,$loop就是要等多久才執行的時間間隔
$loop = $loop > 0 ? $loop : 0;
if(!$loop) break; // 如果循環的間隔為零,則停止
sleep($loop);
// ...
// 執行某些代碼
// ...
@unlink(dirname(__FILE__).'/cron-run'); // 這里就是通過刪除cron-run來告訴程序,這個定時任務已經在執行過程中,不能再執行一個新的同樣的任務
$loop = $interval;
} while(true);