導航:首頁 > 編程語言 > cron定時任務php

cron定時任務php

發布時間:2022-07-19 22:35:46

1. 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);

2. 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這么復制。

3. php如何每天定時執行

php做不到每天定時執行,只有java或者c可以,因為php是不訪問頁面就不會動得代碼,但是有一個方法可以曲線救國

你寫一個頁面是你要每天定時執行的頁面,然後視你的操作系統而言,做定時任務,定時去訪問這個頁面

  1. 如果是windows請使用任務計劃功能

  2. 如果是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

4. php如何實現定時任務,php定時任務方法,最佳

PHP製作定時任務(也稱計劃任務)的方法,大概分為2種:

  1. 現在基本所有的PHP框架,如:ThinkPHP,Yii,Laravel等等;它們都是單入口的形式,也就是說所有的請求都集合到index.php中,然後再由框架核心來根據請求參數的不同來分配到不同的控制器當中。基於單入口的形式,那麼就可以做基於行為(例如TP3.2)或者說基於事件的定時任務。

  2. 系統自動的定時任務,比如Linux的crontab,windows的計劃任務等。

兩中方法各有所長各有所短

基於事件:這種利用的是框架本身提供的一些行為來實現,優點是:不需要特殊配置,只要項目能跑起來,那麼定時任務也能執行。缺點是:靈活性比較差,必須要藉助框架實現。

基於系統:基於操作系統來實現,優點是:靈活性很高,而且可控性也很好。缺點是:需要特殊配置,專業要求性比較強。

具體要使用哪種方法,可以依據自己的能力和項目需要來選擇。最後附上TP3.2的定時任務配置,這個只需要配置就可以,如果想查看具體實現原理,可以查看/ThinkPHP/Library/Behavior/CronRunBehavior.class.php

第一步:/Application/Common/Conf目錄下新建兩個文件:
分別如:
/Application/Common/Conf/tags.php
/Application/Common/Conf/crons.php

1)新建tags.php,編輯內容如下:
returnarray(
'app_end'=>array('BehaviorCronRunBehavior'),
);

2)新建crons.php,編輯內容如下:
returnarray(
'cron_1'=>array('myplan',1),
);

第二步:/Application/目錄下新建Cron文件夾,裡面新建文件myplan.php文件
路徑如:/Application/Cron/myplan.php
編輯內容如下:
echo11111;

查看是否運行成功,最簡單的方法是查看/Application/Runtime/~crons.php,這個文件是否存在。

5. 寶塔上怎麼做定時任務執行php腳本得,請大牛指點,詳解謝謝

用crond服務,設置定時任務。不光定時執行腳本,看服務狀態也可以,多用於系統的健康檢查。望採納

6. 如何使用Linux的Crontab定時執行PHP腳本的方法

Linux中,周期執行的任務一般由cron這個守護進程來處理 ps -ef | grep cron cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。 cron的配置文件稱為「crontab」,是「cron table」的簡寫。 一、 cron在3個地方查找配置文件

7. 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);
?>

8. 如何使用Ubuntu中的Crontab定時執行PHP文件

先確認自己在LINUX Ubuntu 伺服器上php的安裝模式,以CGI 模塊還是Apache模塊方式安裝? 如果不確定php安裝模式,可以使用 phpinfo() 函數查看:將<?php phpinfo(); ?> 寫在php文件中上傳到網站伺服器,訪問該頁面,就在頁面頂部我們找到「Server API」,如果類似「Apache 2.0 Handler」,那麼就是apache模塊;否則php是CGI 模式(shell 命令行模式)。這兩種不同的php安裝模式,正對應於前面介紹的ubuntu crontab 定時執行php的兩種解決方法。
CGI 編譯
如果Server API是cgi,那麼在需要cron執行的php腳本的第一行額外加入一段代碼#!/usr/bin/php -q(類似PERL語法),指定伺服器中php可執行程序的位置,具體步驟如下:
1. 確認Ubuntu系統已經安裝了php5-cli模塊,安裝命令:apt-get install php5-cli。在目錄 /usr/bin/php下生成 php可執行程序。
2. 編輯待定時執行的php腳本文件crontab.php,如:
#!/usr/bin/php -q
<?php
$file = 「/var/www/」.date(『H』).』_』.date(『i』).』_』.date(『s』).』.txt』;
file_put_contents($file,date(『Y-m-d』));
?>
3. 編輯 crontab 任務:
打開終端,輸入命令:crontab -e,
Select an editor. To change later, run 『select-editor』.
1. /bin/ed
2. /bin/nano <—- easiest
3. /usr/bin/vim.tiny
選擇一個Ubuntu編輯器後,編輯/tmp/crontab.AuN7IQ/crontab 文件:
# m h dom mon dow command
在下面添加定時執行命令:
* * * * * php /path/to/your/cron.php
5個星號分別代表定時指定每分、小時、日、月、周。如每天的下午7點執行crontab.php,命令為:
* 19 * * * php /var/www/cron/crontab.php
然後按Ctrl+O保存,Ctrl+X退出。
4. 執行以下Crontab命令行
Shell> crontab crontab
確認crontab.php的許可權為可執行("chmod 755 /var/www/cron/crontab.php")。
Apache 模塊
如果php安裝是以 apache 模式運行的,那麼在要在ubuntu伺服器定時執行的php腳本開頭就不用加 #!/usr/bin/php -q 這一行。php腳本在ubuntu 通過crontab的定時執行通過Lynx瀏覽器的自動訪問來完成。
1. Lynx瀏覽器安裝。
Lynx瀏覽器是一款輕便的web瀏覽器,使用於大部分Unix 和Linux系統環境。安裝命令:sudo apt-get install lynx。
2. 編輯cron任務,命令crontab -e

9. linux下使用crontab實現定時PHP計劃任務失敗的原因分析

很多人在linux下使用crontab實現PHP執行定時任務卻未能成功,不能生成緩存。本文就linux下使用crontab實現定時PHP計劃任務失敗的原因做一分析。
一般我們linux定時執行php代碼例如:
*/5
*
*
*
*
/usr/local/php/bin/php
/home/wwwroot/1.php
其實這樣是可以執行php代碼的。
但是為什麼很多朋友在1.php寫的生成一個緩存文件沒有生成呢?
這個要涉及到crontab執行php的相對路徑問題.
注意在執行文件中,有包含文件的,如:
include_once'./mysql.php';
當php代碼中,用的是相對路徑時,只有進入到那個目錄下,
然後執行/usr/local/php/bin/php
/home/wwwroot/1.php
才能引用mysql.php生效。
解決方法如下:
*/10
*
*
*
*
cd
/home/wwwroot
&&
/usr/local/php/bin/php
/home/wwwroot/1.php
同時也這樣緩存才能生成在
/home/wwwroot。此處需要特別注意!
這是大部分寫的所謂linux定時執行php沒有提到的,也最容易產生誤區的。
當然方法還有很多,還可以設置環境變數之類的。這個只是一個簡單的方法。

閱讀全文

與cron定時任務php相關的資料

熱點內容
如何讓app適應不同的手機屏幕大小 瀏覽:8
蘋果手機如何給安卓手機分享軟體 瀏覽:759
蘋果電腦怎麼運行騰訊雲伺服器 瀏覽:59
明日之後沙石堡命令助手 瀏覽:261
蛋糕店用什麼樣的app 瀏覽:877
長安銀行信用卡app怎麼取現 瀏覽:635
dos命令cmd命令的 瀏覽:226
阿里雲存檔視頻文件的伺服器 瀏覽:194
ftp修改文件許可權命令 瀏覽:491
周易八卦梅花演算法 瀏覽:676
java組織機構 瀏覽:953
h5大轉盤游戲源碼 瀏覽:592
學校伺服器地址查詢 瀏覽:109
pythontutorial下載 瀏覽:524
pythonswampy示例 瀏覽:95
有沒有什麼語音講書看書的app 瀏覽:995
文件夾怎麼做標題 瀏覽:33
騰訊雲伺服器如何防止被攻擊 瀏覽:881
六稜柱的體積演算法 瀏覽:935
淘寶什麼雲伺服器好用 瀏覽:340