php腳本運行時間
① 如何使用linux的Crontab定時執行php腳本的方法
*/1 * * * * /usr/local/php/bin/php /home/wwwroot/clewx/web/linux.php Crontab Dingdian op 14186
這是我伺服器上的crontab粘貼給你了。
1、*/1是代表每分鍾。
2、/usr/local/php/bin/php 是php腳本。意思就是拿PHP去執行,跟拿迅雷下載東西一個道理,都是需要指定一個東西去執行。
3、/home/wwwroot/clewx/web/linux.php 是php程序
4、Crontab Dingdian op 14186 是4個參數,因為我的程序是MVC的,所以執行的是Crontab模塊的Dingdian控制器的op方法,14186是一個參數
5、上linux.php代碼,直接使用$argv可以接收參數
$_GET['m']=$argv[1];
$_GET['c']=$argv[2];
$_GET['a']=$argv[3];
$_GET['id']=$argv[4];
② 如何使用Linux的Crontab定時執行PHP腳本的方法
鍵入 crontab
-e 編輯crontab服務文件
------------------------------------------Ubuntu中的linux---------------
安裝lynx包:apt-get isntall lynx
先寫ln.sh腳本:lynx http://10.11.12.49/data_task.php
設置定時:crontab -e
0 1 * * * bash /var/www/test/ln.sh
-------------------------------------------------------------------------
分為兩種情況:
第一種情況:你的php腳本中沒有引入其他PHP文件,也就是說沒有include,require_once等命令的PHP文件
* */1 * * * /usr/local/php/bin/php
/var/www/html/wwwroot/web/script.php (每一小時執行一次script.php)
注意,這樣寫需要把PHP變成可執行的腳本文件。在命令行下,腳本所在目錄
chmod +x script.php
注意:你的script.php文件中一定要在開始處加上: #!/usr/local/php/bin/php -q
,下面是一個完整的script.php文件代碼
<?php
#!/usr/local/php/bin/php -q
session_start();
define( "DB_PASSWORD", "111111" ); // 伺服器登陸密碼
define( "DB_NAME", "db_shopping" ); // 資料庫名稱
define( "DB_USER", "root" ); // 伺服器登陸用戶
define( "DB_HOST", "127.0.0.1" ); // 伺服器IP地址或名稱
define( "DB_PORT", "3306" ); // 伺服器登陸埠號
define( "DB_CHARSET", "utf8" ); // 資料庫默認語言
define( "DB_DEBUG", false ); // 是否設置為調試模式
define( "DB_CLOSE", false ); // 是否主動關閉資料庫連接
$con=mysql_connect(DB_HOST.":".DB_PORT,DB_USER,DB_PASSWORD);
mysql_query ( "SET character_set_connection = ".DB_CHARSET.",
character_set_results = ".DB_CHARSET.", character_set_client =
binary");
if (!$con) die("Mysql Error:".mysql_error());
mysql_select_db(DB_NAME,$con);
//$dates=date()
$sqll="insert into test(NAME,Sex,thisdate,state)
values('love','0','2011-08-11','1')";
$resl=mysql_query($sqll);
echo "成功...";
?>
/usr/local/php/bin/php的意思是:用/usr/local/php/bin/目錄中的php.exe文件來執行
/var/www/html/wwwroot/web/script.php
第二種情況:你的php腳本中有引入其他PHP文件,也就是說有用到include,require_once命令的PHP文件(先寫shell腳本)
上面的方法有一個問題:當script腳本中有include文件時,腳本根本找不對PHP的路徑,php將會在/bin/local/php目錄下找文件,當然找不到。
所以,遇見這種情況,按照下面的方法做:
在終端上輸入如下命令得到sh 和 lynx 程序的路徑:
whereis sh
whereis lynx
or
which sh
which lynx
隨便輸入一個,其中便會返回你要的路徑。如果你的系統里沒有lynx,試試links,w3m,或者
links2,這些是其它的文本模型瀏覽器。這些瀏覽器將會運行你的腳本。
然後你需要創建一個sh文件,用它來調用php文件,通過lynx。假設你的伺服器已經安裝了lynx,sh路徑為
/bin/sh,lynx路徑為 /usr/local/bin/lynx
#!/bin/sh
/usr/local/bin/lynx -source
http://www.yoursite.com/folder/script.php
注意感嘆號
把這個腳本保存為cron-lynx.sh
保存到一個你找得到的地方,比如:
你可以把它放在網站根目錄。
然後再創建一個script.php的文件。當cron運行的時候,將會通過lynx來調用它。這個文件可以通過瀏覽器來訪問。
然後編輯主機的crontab,像下面這樣。
*/1 * * * * root /bin/sh
/usr/www/yourdirectory/sh_scripts/cron-lynx.sh
在/bin/sh 和 /usr 間有空格。就這樣就設好了,還有一點要注意的是,你的sh文件和php文件都正確無誤。
===================================================================================
linux下的crontab服務:
1、crontab 是用來讓使用者在固定時間或固定間隔執行程序之用
在linux平台上如果需要實現任務調度功能可以編寫cron腳本來實現。
以某一頻率執行任務
linux預設會啟動crond進程,crond進程不需要用戶啟動、關閉。
crond進程負責讀取調度任務並執行,用戶只需要將相應的調度腳本寫入cron的調度配置文件中。
cron的調度文件有以下幾個:
1.
crontab
2.
cron.d
3.
cron.daily
4.
cron.hourly
5.
cron.monthly
6.
cron.weekly
如果用的任務不是以hourly monthly weekly方式執行,則可以將相應的crontab寫入到crontab
或cron.d目錄中。
示例:
每隔一分鍾執行一次腳本 /opt/bin/test-cron.sh
可以在cron.d新建腳本 echo-date.sh
內容為
*/1 * * * * root /opt/bin/test-cron.sh
2、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這個服務已經在進程裡面了,我們就可以用這個服務了
查看服務是否已經運行用 ps -ax | grep cron
3、crontab命令
查看該用戶下的crontab服務是否創建成功, 用 crontab -l
命令
命令 which php 查看linux下安裝的php的路徑
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命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。
crontab命令選項:
-u指定一個用戶
-l列出某個用戶的任務計劃
-r刪除某個用戶的任務
-e編輯某個用戶的任務
4、cron文件語法:
分
小時
日
月
星期
命令
0-59
0-23
1-31
1-12
0-6
command
(取值范圍,0表示周日一般一行對應一個任務)
記住幾個特殊符號的含義:
「*」代表取值范圍內的數字,
「/」代表」每」,
「-」代表從某個數字到某個數字,
「,」分開幾個離散的數字
5、任務調度設置文件的寫法
可用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參數表示,執行後面目錄中的所有可執行文件。 ]
6、 新增調度任務
新增調度任務可用兩種方法:
1)、在命令行輸入: crontab -e 然後添加相應的任務,wq存檔退出。
2)、直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應的任務。
7、 查看調度任務
crontab -l //列出當前的所有調度任務
crontab -l -u jp
//列出用戶jp的所有調度任務
8、 刪除任務調度工作
crontab -r //刪除所有任務調度工作
9、 任務調度執行結果的轉向
例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執行cmd腳本超時,不能去改ini因為超時期間頁面一直在等待,怎麼才能
PHP腳本執行超時的解決辦法
在php中默認腳本執行超時時間為30秒了,如果未進行設置30秒之後如果你的腳本還未執行完就會超時了,下面我來給大詳解解決PHP腳本執行超時的方法。
php.ini 中預設的最長執行時間是 30 秒,雖然可以通過調整 php.ini 中 max_execution_time的值來達到目的,但有些情況是沒有條件修改php.ini的,如何解決這個問題呢。
一種方法是在 PHP 腳本中加入
代碼如下
ini_set('max_execution_time', '0');
將運行時間設置成0(無限值);
另一種方法是在命令行下執行腳本,使用命令行執行腳本時,最大運行時間被設置為了無限值。
修改php.ini的腳本執行時間限制
編輯php.ini,修改max_execution_time值:
代碼如下
max_execution_time=500
//此修改需要重新載入php.ini,需要重啟web伺服器生效。
通過.htaccess 文件設置腳本執行時間
代碼如下
php_value max_execution_time 500
在腳本中設置執行的最大時間
代碼如下
ini_set('max_execution_time', 500);
用php的函數取消腳本的時間限制
代碼如下
set_time_limit(0);
set_time_limit用來設置腳本的超時時間,此函數規定從該句運行時起程序必須在指定秒數內運行結束,超時則程序出錯退出。
下面是一個例子. 有10000條數據, 要修改其中某些數據, 運用PHP分步執行處理, 代碼如下:
action.php
代碼如下
<?php
$stid = isset($_GET['stid'])?$_GET['stid']:0;
$endid = $stid + 100;
$maxid = 10000;
function dosomething(){
//要時間比較多的操作
……
}
$sql_string=」select * from `table` where id>』$stid』 and id<=』$endid』 order by id」;
$datas = getdata_bysql($sql_string);
foreach($datas as $data){
//處理數據
…..
echo $id.」 處理完成. <br />」;
if($id>=$maxid){exit;}
}
if($stid<=$maxid){
$stid = $stid + 100;
$url=」action.php?stid=$stid」;
echo $url;
echo 『<script language=」javascript」>location=」『.$url.』」; </script>』;
}
?>
其中的dosomething()是一個耗時操作. 這里我們通過限制id范圍來減少運行時間, 運行完後通過javascript的跳轉來自動運行下一步
現在dedecms生成html頁面時就是這樣做
④ 怎樣定時執行某個PHP腳本文件,帶參數,沒有伺服器許可權,虛擬主機用戶 - 技術問答
1樓的,要是每天的2點鍾定時執行某個腳本。又該怎麼做呢??ignore_user_abort。。。。我要定時執行某個文件,而不是執行ignore_user_abort這個函數所在的那個php腳本
⑤ 如何使用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