PHP之定時任務(絕對實用)

在工做中常常會用到定時任務,除了在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中去寫)

注意:以上全部的路徑都須要些絕對路徑.(重要)

相關文章
相關標籤/搜索