Maison développement back-end tutoriel 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);
Copier après la connexion

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

二. 简单可控型

   config.php

return 1;<!--?php
return 1;
?-->
Copier après la connexion

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);
Copier après la connexion

 

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

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

三. 简单改进型

$time=15;
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
/*
    function
*/
sleep($time);
file_get_contents($url);
Copier après la connexion

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>
Copier après la connexion

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

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

六.买个vps,用crontab


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Connaissez-vous quelques raisons pour lesquelles les tâches planifiées de crontab ne sont pas exécutées ? Connaissez-vous quelques raisons pour lesquelles les tâches planifiées de crontab ne sont pas exécutées ? Mar 09, 2024 am 09:49 AM

Résumé de quelques raisons pour lesquelles les tâches planifiées crontab ne sont pas exécutées. Heure de mise à jour : 9 janvier 2019 09:34:57 Auteur : Hope on the field Cet article résume et vous présente principalement quelques raisons pour lesquelles les tâches planifiées crontab ne sont pas exécutées. tout le monde Des solutions sont données pour chacun des déclencheurs possibles, qui ont une certaine valeur de référence et d'apprentissage pour les collègues qui rencontrent ce problème. Les étudiants dans le besoin peuvent suivre l'éditeur pour apprendre ensemble. Préface : J'ai récemment rencontré des problèmes au travail. La tâche n'a pas été exécutée. Plus tard, lors d'une recherche sur Internet, j'ai découvert qu'Internet mentionnait principalement ces cinq incitations : 1. Le service crond n'est pas démarré n'est pas une fonction du noyau Linux, mais repose sur un cron.

Comment utiliser Systemd et Crontab pour implémenter l'exécution parallèle de tâches dans les systèmes Linux Comment utiliser Systemd et Crontab pour implémenter l'exécution parallèle de tâches dans les systèmes Linux Sep 26, 2023 pm 06:37 PM

Comment utiliser Systemd et Crontab pour implémenter l'exécution parallèle de tâches dans un système Linux. Dans un système Linux, l'exécution parallèle de tâches est l'un des moyens importants pour améliorer l'efficacité et les performances du système. Cet article expliquera comment utiliser les outils Systemd et Crontab pour implémenter l'exécution parallèle de tâches dans un système Linux et fournira des exemples de code spécifiques. 1. Introduction à Systemd Systemd est un outil utilisé pour gérer le processus de démarrage et la gestion des services des systèmes Linux. via la configuration

Comment lire le journal des erreurs Linux crontab Comment lire le journal des erreurs Linux crontab Mar 07, 2023 am 09:29 AM

Comment afficher le journal des erreurs crontab sous Linux : 1. Affichez le répertoire de fichiers « /var/log/cron » 2. Utilisez la commande « tail -f /var/log/cron » pour afficher la fin du fichier en temps réel ; time; 3. Utilisez la commande "vim /var /log/cron" qui peut être visualisée via une visionneuse de texte avancée.

Comment résoudre les pièges de Linux commentant les fichiers crontab et crontab exécutant sh Comment résoudre les pièges de Linux commentant les fichiers crontab et crontab exécutant sh May 15, 2023 pm 09:58 PM

Les pièges de Linux commentant les fichiers crontab et crontab exécutant sh. Il s'avère que de nombreuses crontabs sont écrites sous Linux pour effectuer certaines tâches régulièrement : Condition requise : Il est nécessaire d'annoter certaines tâches crontab. Ajoutez simplement la crontab à annuler. Ajoutez simplement « # » avant la tâche. Par exemple, 54**sunecho"runat5after4everysunday"Commentaire : #54**sunecho"runat5after4everysunday"C'est aussi simple que cela. Rencontrez la fosse 1, regardez l'exemple suivant récemment

Comment redémarrer automatiquement les applications sous Linux à l'aide de Systemd et Crontab Comment redémarrer automatiquement les applications sous Linux à l'aide de Systemd et Crontab Sep 28, 2023 pm 03:35 PM

Comment utiliser Systemd et Crontab pour redémarrer automatiquement les applications sur les systèmes Linux. Dans les systèmes Linux, Systemd et Crontab sont deux outils très importants. Systemd est un gestionnaire de systèmes et de services, tandis que Crontab est un outil permettant d'automatiser des tâches à des moments précis. Cet article utilisera un exemple spécifique pour présenter comment utiliser Systemd et Crontab pour redémarrer automatiquement les applications dans les systèmes Linux. Supposons que nous ayons un non

Comment utiliser Systemd et Crontab pour définir la priorité des tâches planifiées dans le système Linux Comment utiliser Systemd et Crontab pour définir la priorité des tâches planifiées dans le système Linux Sep 27, 2023 am 08:25 AM

Comment utiliser Systemd et Crontab pour définir la priorité des tâches planifiées dans un système Linux nécessite des exemples de code spécifiques. Dans les systèmes Linux, nous devons souvent configurer des tâches planifiées pour effectuer certaines opérations répétitives, telles que la sauvegarde planifiée des fichiers, le nettoyage régulier des journaux, etc. Cependant, différentes tâches peuvent avoir des priorités différentes, certaines tâches nécessitent une priorité plus élevée pour garantir qu'elles sont exécutées à temps, tandis que d'autres peuvent être exécutées plus tard. Cet article explique comment utiliser Systemd et Crontab pour définir les horaires.

Comment utiliser Systemd et Crontab pour réaliser le démarrage automatique du système Linux Comment utiliser Systemd et Crontab pour réaliser le démarrage automatique du système Linux Sep 26, 2023 am 11:57 AM

Comment utiliser Systemd et Crontab pour implémenter le démarrage automatique du système dans les systèmes Linux Introduction : Dans les systèmes Linux, nous devons souvent définir certains services ou scripts couramment utilisés sur le démarrage automatique du système afin qu'ils puissent s'exécuter automatiquement après le redémarrage du système. Dans cet article, nous présenterons comment utiliser les deux outils Systemd et Crontab pour réaliser le démarrage automatique du système et donnerons des exemples de code spécifiques. 1. Utilisation de Systemd Systemd est une gestion de systèmes et de services couramment utilisée dans les systèmes d'exploitation Linux.

Partage de conseils de dépannage du journal des erreurs Linux Crontab Partage de conseils de dépannage du journal des erreurs Linux Crontab Mar 18, 2024 am 09:21 AM

Les conseils de dépannage du journal des erreurs LinuxCrontab sont partagés dans les systèmes Linux. Crontab est un outil de gestion de tâches planifiées très couramment utilisé qui peut aider les utilisateurs à effectuer régulièrement des tâches spécifiques. Cependant, vous rencontrerez parfois des erreurs lors de l'utilisation de Crontab, qui doivent être vérifiées et résolues à temps. Cet article partagera quelques conseils pour dépanner les journaux d'erreurs Crontab et comment localiser et résoudre les problèmes grâce à des exemples de code spécifiques. Afficher les journaux Crontab Tout d'abord, nous pouvons afficher Crontab

See all articles