recherche

Maison  >  Questions et réponses  >  le corps du texte

linux - php exécute les tâches planifiées ?

用户添加定时任务后如
  每月30 号发工资
  订单到期未付款恢复
这种是如何做的?
直接在Linux 操作crontab 可以,
但是用户添加一个任务就加到 crontab 怎么实现?
巴扎黑巴扎黑2788 Il y a quelques jours1179

répondre à tous(8)je répondrai

  • 扔个三星炸死你

    扔个三星炸死你2017-06-27 09:19:40

    Mots clés : shell_exec, mode sans échec php

    shell_exec résout votre problème d'ajout de tâches planifiées. La fonction shell_exec ne peut pas être utilisée lorsque le mode sans échec PHP est activé.

    répondre
    0
  • 欧阳克

    欧阳克2017-06-27 09:19:40

    Les tâches planifiées peuvent être stockées dans MySQL ou dans des fichiers, puis utiliser crontab pour exécuter MySQL ou des fichiers

    répondre
    0
  • 为情所困

    为情所困2017-06-27 09:19:40

    Utilisez crontab, tel que :

    0 0 30 * * 执行文件

    répondre
    0
  • PHP中文网

    PHP中文网2017-06-27 09:19:40

    Les procédures stockées MySQL peuvent également exécuter des tâches planifiées

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-27 09:19:40

    Utilisez un middleware de tâches planifiées indépendant pour gérer, les tâches planifiées par l'utilisateur ne peuvent pas être placées dans crontab

    répondre
    0
  • 为情所困

    为情所困2017-06-27 09:19:40

    Je vais citer Naist
    Tout d'abord, vous devez pouvoir utiliser crontab Oui, si vous ne savez pas comment l'utiliser, utilisez simplement Baidu. Je n'y répondrai pas ici. .
    Puis dans la ligne de commande

    crontab -e

    Après

    0 0 30 * * php 需要定期执行的php脚本位置

    répondre
    0
  • 習慣沉默

    習慣沉默2017-06-27 09:19:40

    Peut-être que ce n'est pas crontab. J'ai déjà utilisé node.js写过一个用户可以自己定时的WebSocket,在后台挂起。当用户向这个WebSocket发送请求时,把定时的时间记录到一个缓存文件中(JSON),然后设置node.jsmon propre minuteur.

    Si le service WebSocket raccroche, redémarrez simplement le script en arrière-plan et le script réinitialisera la tâche planifiée en fonction de l'heure enregistrée dans le JSON mis en cache. Je peux mettre du code ici, le code principal est omis et quelques commentaires sont ajoutés pour référence

    'use strict';
    // 一些NodeJS包
    const WebSocket = require('ws');
    const path = require('path');
    const crontab = require('node-crontab');
    const spawn = require('cross-spawn');
    const fsExtra = require('fs-extra');
    const objectValues = require('object-values');
    
    // 省略了一些配置
    
    const wss = new WebSocket.Server({port: 8080}); // 创建WebSocket服务
    
    let ScheduleList = {}; // 这个为存储时间的JS对象
    let JobList      = {}; // 这个为存储定时任务ID的JS对象,如果要取消任务,就通过这个来查找定时任务ID
    
    // 省略了日志方法
    
    // 故障后重启载入任务时间的方法
    const loadJobs = () => {
        let jobsCache = path.resolve(__dirname, './config/scheduler.jobs');
    
        if(fsExtra.pathExistsSync(jobsCache)) {
            ScheduleList = fsExtra.readJsonSync(jobsCache, {throw: false}) || {};
        }
    };
    // 用户传入时间时将任务时间对象ScheduleList重写到文件的方法
    const saveJobs = () => {
        let jobsCache = path.resolve(__dirname, './config/scheduler.jobs');
        fsExtra.outputJsonSync(jobsCache, ScheduleList);
    };
    // 根据ScheduleList重新创建计划任务的方法
    const rerunJobs = () => {
        for(let jobScheduleId in ScheduleList) {
            let hour   = ScheduleList[jobScheduleId].hour || 0;
            let minute = ScheduleList[jobScheduleId].minute || 0;
    
            let jobId = crontab.scheduleJob(`${minute} ${hour} * * *`, () => {
                // 此处省略了任务创建的具体操作,用的cross-spawn包
            });
    
            JobList[id] = jobId;
        }
    };
    
    loadJobs(); // 启动时载入时间
    rerunJobs(); // 根据时间重新创建计划任务
    
    wss.on('connection', ws => {
        ws.on('message', message => {
            // 省略了传入数据的解析
    
            // 如果任务存在,先删除任务
            if(JobList[id]) {
                crontab.cancelJob(JobList[id]);
                delete ScheduleList[id];
                delete JobList[id];
            }
    
            // 重新添加任务
            let jobId = crontab.scheduleJob(`${minute} ${hour} * * *`, () => {
                // 同rerunJobs()里的创建操作,省略细节
            });
    
            ScheduleList[id] = {id: id, hour: hour, minute: minute};
            JobList[id]      = jobId;
    
            saveJobs(); // 保存任务计划时间
    
            ws.send(JSON.stringify(response(null, {message: '应用成功'}))); // 给请求者反馈
        });
    });

    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-27 09:19:40

    Pour PHP, vous ne pouvez utiliser crontab que pour sélectionner des tâches planifiées, donc le temps de rotation de formation le plus court est de 1 seconde
    Si vous le souhaitez dans un délai d'une seconde, vous devez trouver un autre moyen.

    répondre
    0
  • Annulerrépondre