백엔드 개발 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);
로그인 후 복사

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

二. 简单可控型

   config.php

return 1;<!--?php
return 1;
?-->
로그인 후 복사

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);
로그인 후 복사

 

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

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

三. 简单改进型

$time=15;
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
/*
    function
*/
sleep($time);
file_get_contents($url);
로그인 후 복사

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>
로그인 후 복사

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

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

六.买个vps,用crontab


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

crontab 예약 작업이 실행되지 않는 몇 가지 이유를 알고 있습니까? crontab 예약 작업이 실행되지 않는 몇 가지 이유를 알고 있습니까? Mar 09, 2024 am 09:49 AM

crontab 예약 작업이 실행되지 않는 몇 가지 이유 요약 업데이트 시간: 2019년 1월 9일 09:34:57 작성자: 현장에서 crontab 예약 작업이 실행되지 않는 몇 가지 이유를 주로 요약하고 소개합니다. 모두 이 문제에 직면한 동료를 위한 특정 참조 및 학습 가치가 있는 각 가능한 트리거에 대한 솔루션이 제공됩니다. 도움이 필요한 학생들은 편집자를 따라 함께 학습할 수 있습니다. 최근 직장에서 몇 가지 문제가 발생했습니다. 나중에 인터넷을 검색해 보니 인터넷에서 주로 다음과 같은 5가지 인센티브를 언급하고 있었습니다. 1. 크론드 서비스가 시작되지 않았습니다. 크론탭은 리눅스 커널의 기능이 아니고 크론에 의존합니다.

Systemd 및 Crontab을 사용하여 Linux 시스템에서 작업의 병렬 실행을 구현하는 방법 Systemd 및 Crontab을 사용하여 Linux 시스템에서 작업의 병렬 실행을 구현하는 방법 Sep 26, 2023 pm 06:37 PM

Systemd 및 Crontab을 사용하여 Linux 시스템에서 작업의 병렬 실행을 구현하는 방법 Linux 시스템에서 작업의 병렬 실행은 시스템 효율성과 성능을 향상시키는 중요한 수단 중 하나입니다. 이 기사에서는 Systemd 및 Crontab 도구를 사용하여 Linux 시스템에서 작업의 병렬 실행을 구현하는 방법을 소개하고 특정 코드 예제를 제공합니다. 1. Systemd 소개 Systemd는 Linux 시스템의 시작 프로세스 및 서비스 관리를 관리하는 데 사용되는 도구입니다. 구성을 통해

Linux에서 crontab 파일에 주석을 달고 sh를 실행하는 crontab의 함정을 해결하는 방법 Linux에서 crontab 파일에 주석을 달고 sh를 실행하는 crontab의 함정을 해결하는 방법 May 15, 2023 pm 09:58 PM

crontab 파일에 주석을 달고 sh를 실행하는 crontab의 함정 Linux에서 특정 작업을 정기적으로 수행하기 위해 많은 crontab이 작성되는 것으로 나타났습니다. 요구 사항: 특정 crontab 작업에 주석을 추가해야 합니다. 취소할 crontab을 추가하면 됩니다. 작업 앞에 '#'을 추가하면 됩니다. 예:54**sunecho"runat5after4everysunday" 댓글: #54**sunecho"runat5after4everysunday"그렇게 간단합니다. 1번 구덩이와 마주쳤습니다. 최근에 다음 예를 보세요

Linux crontab 오류 로그를 읽는 방법 Linux crontab 오류 로그를 읽는 방법 Mar 07, 2023 am 09:29 AM

Linux에서 crontab 오류 로그를 보는 방법: 1. 파일 디렉터리 "/var/log/cron"을 봅니다. 2. 실제 파일의 tail을 보려면 "tail -f /var/log/cron" 명령을 사용합니다. 3. "vim /var /log/cron" 명령을 사용하면 고급 텍스트 뷰어를 통해 볼 수 있습니다.

Systemd 및 Crontab을 사용하여 Linux에서 애플리케이션을 자동으로 다시 시작하는 방법 Systemd 및 Crontab을 사용하여 Linux에서 애플리케이션을 자동으로 다시 시작하는 방법 Sep 28, 2023 pm 03:35 PM

Systemd 및 Crontab을 사용하여 Linux 시스템에서 애플리케이션을 자동으로 다시 시작하는 방법 Linux 시스템에서 Systemd와 Crontab은 매우 중요한 두 가지 도구입니다. Systemd는 시스템 및 서비스 관리자이고 Crontab은 지정된 시간에 작업을 자동화하는 도구입니다. 이 기사에서는 특정 예를 사용하여 Systemd 및 Crontab을 사용하여 Linux 시스템에서 애플리케이션을 자동으로 다시 시작하는 방법을 소개합니다. 아니오가 있다고 가정하자

Systemd 및 Crontab을 사용하여 Linux 시스템에서 예약된 작업의 우선 순위를 설정하는 방법 Systemd 및 Crontab을 사용하여 Linux 시스템에서 예약된 작업의 우선 순위를 설정하는 방법 Sep 27, 2023 am 08:25 AM

Linux 시스템에서 Systemd 및 Crontab을 사용하여 예약된 작업의 우선 순위를 설정하려면 특정 코드 예제가 필요합니다. Linux 시스템에서는 예약된 백업 파일, 정기적인 로그 정리 등 일부 반복 작업을 수행하기 위해 예약된 작업을 설정해야 하는 경우가 많습니다. 등. 그러나 작업마다 우선순위가 다를 수 있습니다. 일부 작업은 시간 내에 실행되도록 하기 위해 더 높은 우선순위가 필요한 반면, 일부 작업은 나중에 실행될 수 있습니다. 이 기사에서는 Systemd 및 Crontab을 사용하여 타이밍을 설정하는 방법을 소개합니다.

Systemd 및 Crontab을 사용하여 Linux 시스템에서 시스템 자체 시작을 구현하는 방법 Systemd 및 Crontab을 사용하여 Linux 시스템에서 시스템 자체 시작을 구현하는 방법 Sep 26, 2023 am 11:57 AM

Systemd 및 Crontab을 사용하여 Linux 시스템에서 시스템 자체 시작을 구현하는 방법 소개: Linux 시스템에서는 일반적으로 사용되는 일부 서비스나 스크립트를 시스템이 다시 시작된 후 자동으로 실행될 수 있도록 시스템 자체 시작으로 설정해야 하는 경우가 많습니다. 이 기사에서는 Systemd와 Crontab이라는 두 가지 도구를 사용하여 시스템 자체 시작을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. Systemd의 사용 Systemd는 Linux 운영 체제에서 일반적으로 사용되는 시스템 및 서비스 관리입니다.

Systemd 및 Crontab을 사용하여 Linux 시스템에서 작업 종속성을 구현하는 방법 Systemd 및 Crontab을 사용하여 Linux 시스템에서 작업 종속성을 구현하는 방법 Sep 27, 2023 pm 08:13 PM

Systemd 및 Crontab을 사용하여 Linux 시스템에서 작업 종속성을 구현하는 방법 소개: Linux 시스템에서 작업 예약은 각 작업이 예약된 시간과 순서에 따라 실행되도록 보장할 수 있는 매우 중요한 부분입니다. Systemd와 Crontab은 일반적으로 사용되는 두 가지 작업 예약 도구이며 다양한 시나리오에 적합합니다. 이 문서에서는 Systemd 및 Crontab을 사용하여 작업 종속성을 구현하고 특정 코드 예제를 제공하는 방법을 소개합니다. 1. 시스템화

See all articles