Rumah pembangunan bahagian belakang tutorial php PHP 实现定时任务的几种方法对比

PHP 实现定时任务的几种方法对比

Jun 20, 2016 pm 01:02 PM
crontab

PHP 实现定时任务的几种方法

这几天需要用PHP写一个定时抓取网页的服务器应用. 在网上搜了一下解决办法, 发现OSchina的 一个问题的解答很精彩

 提出几种解决办法.现总结如下.

一. 简单直接不顾后果型

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
    //ToDo  
    sleep($interval);// 等待5分钟
}while(true);
Salin selepas log masuk

缺点: 启动之后,便无法控制, 除非终止 PHP 宿主. 不要采用这样方法, 除非你是黑客.

二. 简单可控型

   config.php

return 1;<!--?php
return 1;
?-->
Salin selepas log masuk

cron.php

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
$run = include 'config.php';
if(!$run) die('process abort');
 //ToDo 
 sleep($interval);// 等待5分钟
}while(true);
Salin selepas log masuk

 

  通过 改变config.php 的 return 0 , 来实现停止程序. 一个可行的办法是config.php文件和某个特殊表单交互, 通过HTML页面设置一些变量来进行配置

缺点: 占系统资源, 长时间运行,会有一些意想不到的隐患。比如内存管理方面的问题 .

三. 简单改进型

$time=15;
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
/*
    function
*/
sleep($time);
file_get_contents($url);
Salin selepas log masuk

php脚本sleep 一段时间之后通过访问自身的方式继续执行. 就好像接力赛跑一样..这样就能保证每个PHP脚本执行时间不会太长. 也就不受time_out的限制了.

   因为每一次一次循环php文件都是独立执行,所以这种方法,避免了time_out的限制. 但是最好和上边一样 加上控制代码. cofig.php , 以便能够终止进程.

四. cronTab 型

 

cControlJobNum(1); 
while (true) 
{ 
        <your code> 
         
            
            
} 
function cControlJobNum($job_limit) { 
                $cmd = @popen("ps -ef | grep '{$_SERVER['SCRIPT_FILENAME']}' | grep -v grep | wc -l", 'r'); 
                $num = @fread($cmd, 512); 
                $num += 0; 
                @pclose($cmd); 
                if($num > $job_limit) 
                { 
                        exit; 
                } 
                return true; 
}</your>
Salin selepas log masuk

程序中通过 popen 来判断运行进程的数量,来控制并发

五.采用 BAE或者sae上的 cron 服务来做.

六.买个vps,用crontab


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Adakah anda tahu beberapa sebab mengapa tugas berjadual crontab tidak dilaksanakan? Adakah anda tahu beberapa sebab mengapa tugas berjadual crontab tidak dilaksanakan? Mar 09, 2024 am 09:49 AM

Ringkasan beberapa sebab mengapa tugas berjadual crontab tidak dilaksanakan Masa kemas kini: 9 Januari 2019 09:34:57 Penulis: Harapan di medan ini terutamanya meringkaskan dan memperkenalkan kepada anda beberapa sebab mengapa tugas berjadual crontab tidak dilaksanakan setiap orang Penyelesaian diberikan untuk setiap pencetus yang mungkin, yang mempunyai rujukan dan nilai pembelajaran tertentu untuk rakan sekerja yang menghadapi masalah ini. Pelajar yang memerlukan boleh mengikuti editor untuk belajar bersama-sama: Saya telah menghadapi beberapa masalah di tempat kerja yang dijadualkan tugas tidak dilaksanakan Kemudian, apabila saya mencari di Internet, saya mendapati bahawa Internet terutamanya menyebut lima insentif ini: 1. Perkhidmatan crontab bukan fungsi kernel Linux, tetapi bergantung pada cron.

Cara menggunakan Systemd dan Crontab untuk melaksanakan pelaksanaan tugasan selari dalam sistem Linux Cara menggunakan Systemd dan Crontab untuk melaksanakan pelaksanaan tugasan selari dalam sistem Linux Sep 26, 2023 pm 06:37 PM

Cara menggunakan Systemd dan Crontab untuk melaksanakan pelaksanaan tugas selari dalam sistem Linux Dalam sistem Linux, pelaksanaan tugas selari adalah salah satu cara penting untuk meningkatkan kecekapan dan prestasi sistem. Artikel ini akan memperkenalkan cara menggunakan alat Systemd dan Crontab untuk melaksanakan pelaksanaan tugasan selari dalam sistem Linux dan menyediakan contoh kod khusus. 1. Pengenalan kepada Systemd Systemd ialah alat yang digunakan untuk mengurus proses permulaan dan pengurusan perkhidmatan sistem Linux. melalui konfigurasi

Bagaimana untuk menyelesaikan masalah mengulas fail crontab dan crontab melaksanakan sh dalam Linux Bagaimana untuk menyelesaikan masalah mengulas fail crontab dan crontab melaksanakan sh dalam Linux May 15, 2023 pm 09:58 PM

Linux menganotasi fail crontab dan perlaksanaan crontab sh ternyata bahawa banyak crontab ditulis di bawah Linux untuk melaksanakan tugas tertentu dengan kerap: Keperluan: Ia adalah untuk menganotasi tugas crontab tertentu dibatalkan. Cuma tambah '#' sebelum tugasan. cth.54**sunecho"runat5after4everysunday" Ulasan: #54**sunecho"runat5after4everysunday"Semudah itu. Terjumpa pit 1, lihat contoh berikut baru-baru ini

Bagaimana untuk membaca log ralat crontab linux Bagaimana untuk membaca log ralat crontab linux Mar 07, 2023 am 09:29 AM

Cara melihat log ralat crontab di Linux: 1. Lihat direktori fail "/var/log/cron" 2. Gunakan arahan "tail -f /var/log/cron" untuk melihat ekor fail secara nyata masa; 3. Gunakan arahan "vim /var /log/cron" boleh dilihat melalui pemapar teks lanjutan.

Bagaimana untuk memulakan semula aplikasi secara automatik dalam Linux menggunakan Systemd dan Crontab Bagaimana untuk memulakan semula aplikasi secara automatik dalam Linux menggunakan Systemd dan Crontab Sep 28, 2023 pm 03:35 PM

Cara menggunakan Systemd dan Crontab untuk memulakan semula aplikasi secara automatik dalam sistem Linux Dalam sistem Linux, Systemd dan Crontab adalah dua alat yang sangat penting. Systemd ialah pengurus sistem dan perkhidmatan, manakala Crontab ialah alat untuk mengautomasikan tugas pada masa tertentu. Artikel ini akan menggunakan contoh khusus untuk memperkenalkan cara menggunakan Systemd dan Crontab untuk memulakan semula aplikasi secara automatik dalam sistem Linux. Katakan kita mempunyai No

Cara menggunakan Systemd dan Crontab untuk menetapkan keutamaan tugas berjadual dalam sistem Linux Cara menggunakan Systemd dan Crontab untuk menetapkan keutamaan tugas berjadual dalam sistem Linux Sep 27, 2023 am 08:25 AM

Cara menggunakan Systemd dan Crontab untuk menetapkan keutamaan tugas berjadual dalam sistem Linux memerlukan contoh kod khusus Dalam sistem Linux, kita selalunya perlu menyediakan tugas berjadual untuk melakukan beberapa operasi berulang, seperti fail sandaran berjadual, pembersihan log biasa, dll. Walau bagaimanapun, tugasan yang berbeza mungkin mempunyai keutamaan yang berbeza, sesetengah tugas memerlukan keutamaan yang lebih tinggi untuk memastikan ia dilaksanakan tepat pada masanya, manakala beberapa tugasan boleh dilaksanakan kemudian. Artikel ini akan memperkenalkan cara menggunakan Systemd dan Crontab untuk menetapkan pemasaan

Cara menggunakan Systemd dan Crontab untuk merealisasikan sistem bermula sendiri dalam sistem Linux Cara menggunakan Systemd dan Crontab untuk merealisasikan sistem bermula sendiri dalam sistem Linux Sep 26, 2023 am 11:57 AM

Cara menggunakan Systemd dan Crontab untuk melaksanakan sistem dimulakan sendiri dalam sistem Linux Pengenalan: Dalam sistem Linux, kita selalunya perlu menetapkan beberapa perkhidmatan atau skrip yang biasa digunakan kepada sistem dimulakan sendiri supaya ia boleh berjalan secara automatik selepas sistem dimulakan semula. Dalam artikel ini, kami akan memperkenalkan cara menggunakan dua alat Systemd dan Crontab untuk merealisasikan sistem bermula sendiri, dan memberikan contoh kod khusus. 1. Penggunaan Systemd Systemd ialah sistem dan pengurusan perkhidmatan yang biasa digunakan dalam sistem pengendalian Linux.

Bagaimana untuk melaksanakan kebergantungan tugas dalam sistem Linux menggunakan Systemd dan Crontab Bagaimana untuk melaksanakan kebergantungan tugas dalam sistem Linux menggunakan Systemd dan Crontab Sep 27, 2023 pm 08:13 PM

Cara menggunakan Systemd dan Crontab untuk melaksanakan kebergantungan tugas dalam sistem Linux Pengenalan: Dalam sistem Linux, penjadualan tugas adalah bahagian yang sangat penting, yang boleh memastikan setiap tugasan dilaksanakan mengikut masa dan susunan yang dijadualkan. Systemd dan Crontab ialah dua alat penjadualan tugas yang biasa digunakan, dan ia sesuai untuk senario yang berbeza. Artikel ini akan memperkenalkan cara menggunakan Systemd dan Crontab untuk melaksanakan kebergantungan tugas dan memberikan contoh kod khusus. 1. Sistemd

See all articles