PHP 实现定时任务的几种方法对比
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

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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