1. 程式人生 > >PHP之定時任務(絕對實用)

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

同時 stat table div 可用 目錄 code proc 頁面

在工作中經常會用到定時任務,除了在js中有定時器這個玩意可以用於前端頁面的定時任務;

那麽後端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中使用一個死循環來設置定時任務:

<?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的整數

hour - 從0到23的整數

day - 從1到31的整數 (必須是指定月份的有效日期)

month - 從1到12的整數 (或如Jan或Feb簡寫的月份)

dayofweek - 從0到7的整數,0或7用來描述周日 (或用Sun或Mon簡寫來表示)

command - 需要執行的命令(可用as ls /proc >> /tmp/proc或 執行自定義腳本的命令

註意:一般星期幾和日期不同時使用,*代表是每,* * * * * 每分/每時/每天/每月/每星期幾

具體步驟如下:

/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腳本來執行;

這一種方法是上一中方法的衍生.腳本如下:
#!/bin/bash
php /root/hello.php

然後,執行crontab -e;
* * * * * /bin/sh /root/hello.sh

這樣,定時執行shell腳本,同時shell腳本執行php任務,等同於定時執行php任務;(復雜的業務邏輯就需要自己在php中去寫)

註意:以上所有的路徑都需要些絕對路徑.(重要)

技術分享圖片
 
 
 
 

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