PHP之定時任務(絕對實用)
阿新 • • 發佈:2019-05-09
同時 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之定時任務(絕對實用)