在工做中常常會用到定時任務,除了在js中有定時器這個玩意能夠用於前端頁面的定時任務;javascript
那麼後端PHP如何設置定時任務呢?php
一.以下是javascript中使用setTimeout和setInterval設置定時任務:前端
1 setTimeout(function () { 2 console.log('timeout'); 3 }, 1000); 4 5 setInterval(function () { 6 console.log('interval') 7 }, 1000); 8 9 // 輸出一次 timeout,每隔1S輸出一次 interval
二.在PHP中使用一個死循環來設置定時任務:java
<?php ignore_user_abort();//關掉瀏覽器,PHP腳本也能夠繼續執行. set_time_limit(0);// 經過set_time_limit(0)可讓程序無限制的執行下去 while(true){ sleep(10); //讓程序睡10s,能夠根據本身的邏輯設置時間 $num = 10; file_put_content('a.text',$num);//將內容寫進a.text文件中
缺點: 啓動以後,便沒法控制, 除非終止 PHP 宿主. 通常不要採用這樣方法.
三.使用crontab和php服務來定時執行php任務(在linux環境中)
首先介紹一下crontab的經常使用命令:
/bin/systemctl start(stop/restart/status) crond.service |
啓動(中止、重啓、狀態)定時任務 |
Crontab -e |
添加(刪除)定時任務 |
Crontab -| |
查看已經添加的任務 |
語法: minute hour day month dayofweek command
minute - 從0到59的整數 linux
hour - 從0到23的整數 shell
day - 從1到31的整數 (必須是指定月份的有效日期)後端
month - 從1到12的整數 (或如Jan或Feb簡寫的月份)瀏覽器
dayofweek - 從0到7的整數,0或7用來描述週日 (或用Sun或Mon簡寫來表示)ruby
command - 須要執行的命令(可用as ls /proc >> /tmp/proc或 執行自定義腳本的命令bash
注意:通常星期幾和日期不一樣時使用,*表明是每,* * * * * 每分/每時/天天/每個月/每星期幾
具體步驟以下:
①/root目錄下新建hello.php文件;
② chmod 777 hello.php 將文件更改成可執行的文件;
③/bin/systemctl start crond.service 開啓crontab服務;
④ 執行crontab -e;
⑤在列表中添加任務:* * * * * php /root/hello.php >> /root/hello.text(設置爲每分鐘執行,並將hello.php的輸出寫入到hello.text文件中)
⑥/bin/systemctl start crond.service重啓crontab服務
注意:php文件須要用php去執行(重要);而後全部的路徑都要寫絕對地址。Hello.php寫業務邏輯;
* * * * *所表明的含義,以及怎麼設置時間若是還不清楚的話能夠上網百度;
其實在linux下,上圖這種方法是使用crontab+php命令去執行php文件;
二:將解析命令放在shell腳本中,crontab定時shell腳原本執行;
這一種方法是上一中方法的衍生.腳本以下:
執行crontab -e;#!/bin/bash php /root/hello.php
而後,
* * * * * /bin/sh /root/hello.sh
這樣,定時執行shell腳本,同時shell腳本執行php任務,等同於定時執行php任務;(複雜的業務邏輯就須要本身在php中去寫)
注意:以上全部的路徑都須要些絕對路徑.(重要)
![](http://static.javashuo.com/static/loading.gif)