⑴ 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
⑵ 如何使用Linux的Crontab定時執行PHP腳本的方法
寫好要執行的PHP文件
然後使用Crontab 對應的時間格式等進行執行即可
linux crontab&每隔10秒執行一次 linux下定時執行任務的方法
=============CRONTAB執行PHP文件============
原理:Crontab sleep結合實現每N秒執行文件,延時方法 sleep N
注意:
60必須能整除間隔的秒數(沒有餘數),例如間隔的秒數是2,4,6,10,12等。
如果間隔的秒數太少,例如2秒執行一次,這樣就需要在crontab 加入60/2=30條語句。不建議使用此方法,可以使用下面介紹的第二種方法。
在LINUX中你應該先輸入crontab -e,
然後就會有個vi編輯界面,
再輸入0 3 * * 1 /clearigame2內容到裡面
:wq 保存退出。
在LINUX中,周期執行的任務一般由cron這個守護進程來處理[ps -ef|grep cron]。
cron讀取一個或多個配置文件,這些配置文件中包含了命令行及其調用時間。
cron的配置文件稱為「crontab」,是「cron table」的簡寫。
一、cron在3個地方查找配置文件:
1、/var/spool/cron/ 這個目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名,比如tom建的crontab任務對應的文件就是/var/spool/cron/tom。
一般一個用戶最多隻有一個crontab文件。
二、/etc/crontab 這個文件負責安排由系統管理員制定的維護系統以及其他任務的crontab。
三、/etc/cron.d/ 這個目錄用來存放任何要執行的crontab文件或腳本。
四、許可權
crontab許可權問題到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:
1、如果兩個文件都不存在,則只有root用戶才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,則只有列在cron.allow文件里的用戶才能使用crontab命令,如果root用戶也不在裡面,則root用戶也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,則只有列在cron.deny文件裡面的用戶不能使用crontab命令,其它用戶都能使用。
4、如果兩個文件都存在,則列在cron.allow文件中而且沒有列在cron.deny中的用戶可以使用crontab,如果兩個文件中都有同一個用戶,
以cron.allow文件裡面是否有該用戶為准,如果cron.allow中有該用戶,則可以使用crontab命令。
在crontab文件中如何輸入需要執行的命令和時間。該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。
每個域之間使用空格或者製表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(代表要執行的腳本)
除了數字還有幾個個特殊的符號就是"*"、"/"和"-"、",",*代表所有的取值范圍內的數字,"/"代表每的意思,"/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。
基本格式 :
*****command
分 時 日 月 周 命令
第1列表示分鍾1~59 每分鍾用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令
crontab文件的一些例子:
#每晚的21:30重啟apache。
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
#每月1、10、22日
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
#每天早上6點10分
10 6 * * * date
#每兩個小時
0 */2 * * * date
#晚上11點到早上8點之間每兩個小時,早上8點
0 23-7/2,8 * * * date
#每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
0 11 4 * mon-wed date
#1月份日早上4點
0 4 1 jan * date
很多時候,我們計劃任務需要精確到秒來執行,根據以下方法,可以很容易地以秒執行任務。
以下方法將每10秒執行一次#執行PHP文件
# crontab -e
* * * * * php /www/web/test.php
* * * * * sleep 10; php /www/web/test.php
* * * * * sleep 20; php /www/web/test.php
* * * * * sleep 30; php /www/web/test.php
* * * * * sleep 40; php /www/web/test.php
* * * * * sleep 50; php /www/web/test.php
每5秒執行一次
* * * * * for i in `seq 120`; do awesome_scripts& sleep 0.5; done
===================執行腳本==================
原理:每分鍾執行腳本,使用for語句循環實現每N秒執行文件
注意:如果60不能整除間隔的秒數,則需要調整執行的時間。例如需要每7秒執行一次,就需要找到7與60的最小公倍數,7與60的最小公倍數是420(即7分鍾)。
1.vim crontab1.sh
#!/bin/bash
step=2 #間隔的秒數,不能大於60
for (( i = 0; i < 60; i=(i+step) )); do
$(php '/www/web/test.php')
sleep $step
done
exit 0
2.crontab -e 執行腳本 每分鍾執行
# m h dom mon dow command
* * * * * /home/php/crontab/crontab.sh
每7分鍾執行一次,60*7 = 420,則循環的時候循環最大是420;則 crontab.sh step的值為7,循環結束條件i < 420, crontab -e可以輸入以下語句來實現
# m h dom mon dow command
*/7 * * * * /home/php/crontab/crontab.sh
⑶ thinkphp中怎麼實現後台執行任務
ThinkPHP實現定時執行任務的兩種方法
1、方法一:v3.2.1
①、ThinkPHP/Library/Behavior/CronRunBehavior.class.php文件
在這里首先要說的就是這個自動執行任務文件,官方所給的這個文件存在BUG,我是用的是v3.2.1版本,後面的版本是否有改正大家可以嘗試一下。
[php] view plain
<?php
/**
* =======================================
* Created by WeiBang Technology.
* Author: ZhiHua_W
* Date: 2016/9/22 0005
* Time: 上午 11:12
* Project: ThinkPHP實現定時執行任務
* Power: 自動執行任務
* =======================================
*/
namespace Behavior;
class CronRunBehavior
{
public function run(&$params)
{
if (C('CRON_CONFIG_ON')) {
$this->checkTime();
}
}
private function checkTime()
{
if (F('CRON_CONFIG')) {
$crons = F('CRON_CONFIG');
} else if (C('CRON_CONFIG')) {
$crons = C('CRON_CONFIG');
}
if (!empty($crons) && is_array($crons)) {
$update = false;
$log = array();
foreach ($crons as $key => $cron) {
if (empty($cron[2]) || $_SERVER['REQUEST_TIME'] > $cron[2]) {
G('cronStart');
R($cron[0]);
G('cronEnd');
$_useTime = G('cronStart', 'cronEnd', 6);
$cron[2] = $_SERVER['REQUEST_TIME'] + $cron[1];
$crons[$key] = $cron;
$log[] = 'Cron:' . $key . ' Runat ' . date('Y-m-d H:i:s') . ' Use ' . $_useTime . ' s ' . " ";
$update = true;
}
}
if ($update) {
ThinkLog::write(implode('', $log));
F('CRON_CONFIG', $crons);
}
}
}
}
此段代碼已經將bug修復,大家可以將其復制到 「 ThinkPHP/Library/Behavior/CronRunBehavior.class.php 」 文件中進行保存。
②、tgs.php
在Application/Common/Conf文件夾中新建tags.php文件,進行標簽設置。
[php] view plain
<?php
return array(
//'配置項'=>'配置值'
'app_begin' =>array('BehaviorCronRunBehavior'),
);
③、config.php
在Application/Common/Conf文件夾中的config.php文件進行自動運行配置。
[php] view plain
<?php
return array(
/* 自動運行配置 */
'CRON_CONFIG_ON' => true, // 是否開啟自動運行
'CRON_CONFIG' => array(
'測試執行定時任務' => array('Home/Index/crons', '5', ''), //路徑(格式同R)、間隔秒(0為一直運行)、指定一個開始時間
),
);
④、IndexController.class.php
在Application/Home/Controller/IndexController.class.php文件中進行定時執行任務的編寫。
[php] view plain
<?php
/**
* =======================================
* Created by WeiBang Technology.
* Author: ZhiHua_W
* Date: 2016/9/22 0005
* Time: 上午 11:20
* Project: ThinkPHP實現定時執行任務
* Power: 自動執行任務方法控制器
* =======================================
*/
namespace HomeController;
use ThinkController;
class IndexController extends Controller
{
/*
public function index(){
$this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微軟雅黑"; color: #333;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>歡迎使用 <b>ThinkPHP</b>!</p></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>','utf-8');
}
*/
public function index()
{
$contents = file_get_contents("test.txt");
//每次訪問此路徑將內容輸出,查看內容的差別
var_mp($contents);
exit;
$this->assign("contents", $contents);
$this->display();
}
//定時執行的方法
public function crons()
{
//在文件中寫入內容
file_put_contents("test.txt", date("Y-m-d H:i:s") . "執行定時任務!" . " <br>", FILE_APPEND);
}
}
這樣定時執行任務我們就寫好了,每隔5秒我們訪問任何項目的url,然後查看根目錄下的test.txt文件就會發現裡面的內容變化。
注意:當你修改間隔時間時會發現沒有生效,這是你需要將Runtime/Data文件夾下的緩存文件刪除,間隔時間緩存存放在CRON_CONFIG.php文件中。
純凈的項目文件下載地址:http://download.csdn.net/detail/hua_w/9637267 歡迎大家下載指正。
2、方法2:v3.2.2
此方法和方法一沒有多大的區別。
①、tags.php
在/Application/Common/Conf目錄下新建tags.php文件。(此和方法一處一樣)
[php] view plain
<?php
return array(
//'配置項'=>'配置值'
'app_begin' =>array('BehaviorCronRunBehavior'),
);
②、crons.php
在/Application/Common/Conf目錄下新建crons.php文件。(此處和方法一有區別,注意區分。)
[php] view plain
<?php
return array(
//myplan為我們計劃定時執行的方法文件,2是間隔時間,nextruntime下次執行時間
//此文件位於/Application/Cron/目錄下
'cron' => array('myplan', 2, nextruntime),
);
③、myplan.php
在/Application/Common/目錄下新建 Cron文件夾,裡面新建文件myplan.php文件。
[php] view plain
<?php
echo date("Y-m-d H:i:s")."執行定時任務!" . " <br>";
此時我們就可以訪問項目的url,然後我們會發現在Application/Runtime/目錄下生成了~crons.php文件,文件內容如下:
[php] view plain
<?php
return array (
'cron' =>
array (
0 => 'myplan',
1 => 60,
2 => 1398160322,
),
);
?>
這樣就可以觀察結果了!
⑷ 如何使用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
⑸ ubuntu-linux中定時任務crontab中的php任務無法執行,求可能的原因
在 Ubuntu Linux 中,遇到定時任務 crontab 中的 PHP 任務無法執行的問題時,可以遵循以下步驟排查和解決問題:
首先,檢查定時任務是否正確編輯。確保 crontab 文件中的命令正確,格式為:`* * * * * /usr/bin/php /home/wwwroot/demo/test.php >/var/log/cron.log`。
查看 cron 進程是否存在,可以使用 `ps -ef | grep cron` 命令。如果看到 cron 進程運行,說明定時任務已經開啟。
重啟 cron 服務,使用命令 `/usr/sbin/service cron restart`。如果仍然無法看到輸出在 cron.log 中記錄,或者 20161025.txt 文件中沒有內容,說明 PHP 腳本執行問題可能出現在其他地方。
增加 PHP 腳本執行許可權,使用 `chmod +x test.php`,並驗證 `/usr/bin/php` 的路徑正確。
執行 `which php` 確認 PHP 的安裝路徑。
測試 PHP 腳本在本地是否能正常執行,確認不存在代碼錯誤。
嘗試使用絕對路徑代替相對路徑,修改腳本中的文件路徑。例如:`$name=__DIR__.'/log/20161025.txt';` 應改為符合系統路徑的絕對路徑。
使用 `locate` 命令查找文件,確認文件是否存在於預期位置。
檢查許可權問題,確保執行定時任務的用戶有正確的許可權訪問文件和目錄。
使用 `crontab -l` 確認定時任務已正確添加。
測試輸出是否記錄在日誌文件中,例如通過查看 `/var/log/test.log` 文件驗證。
最後,定位錯誤的關鍵是對比手動執行腳本與通過 crontab 執行時的路徑差異,以及許可權和日誌文件記錄的異同。解決路徑問題後,確認 PHP 腳本能夠正常執行並記錄輸出。
⑹ 如何使用Linux的Crontab執行PHP腳本
Linux中crontab是實現定時執行的指令,利用這個指令我們就可以定時執行某一個php文件,從而實現用PHP做Linux自動執行腳本。
如何用PHP作Linux自動執行腳本?
在安裝PHP的時候,會產生一個可執行文件,文件名為php.將它 到 /usr/local/bin 下.在終端方式執行php程序:
php -q onlinnum.php
PHP 原本是應用在網頁應用的﹐因此它會送出 HTML 的HEADER﹐但是在此我們是要將 PHP 用作 Shell Script﹐"-q" 就是表示不要送 出 HEADER 的意思.你可以試試看不加上 -q 的顯示結果。此時你已經可以在終端方式下執行PHP 代碼了。 linux命令:cron daemon
這是一個系統中常駐的服務,功能在於執行例行性的工作,如每天一次或每月一 次檢查磁碟。cron daemon 會在每分鍾檢查一次排定的工作表(crontab),看看是否有要執行的指令,所有的輸出會以mail寄給用戶。
設置 crontab
命令:crontab -e
該命令呼叫vi編輯器來編輯執行的清單。例如
0 0 1,15 * * fsck /home
1 * * * * /home/myhome/printhello
每一行代表一項排定的工作,在指令前為排定的時間,總共有5個欄位,以空格間隔,由左到右依序如下:
--------------------------
分鍾 從00到 99
點鍾 從0到 24
日 從01到31
月 從01到12
星期 從01到07,代表星期一到星期日
*號表示"每" ,如每天執行,就在第三欄填*號
--------------------------
所以上例的兩項工作是:
每月1號和15號檢查/home 磁碟
每小時的第一分執行 /home/myhome/printhello 這個文件
查看crontab:crontab -l
刪除crontab:crontab -r
我們就知道該怎麼利用PHP和crontab命令作Linux自動執行腳本了。
還需要注意什麼問題?
如果php中有使用資料庫,如oracle等,執行腳本中還需export Oracle的環境設置。因為cron下的腳本執行的用戶都是在沒登陸狀態下執行的,少了很多系統里設置的環境變數的值,在連接資料庫的時候會出問題。