PHP在线任务调度系统实现指南

admin 2025-01-13 189 0

在当今快节奏的开发环境中,任务调度系统是不可或缺的工具。本文将带你一步步用PHP构建一个简易但功能强大的在线任务调度系统,助你轻松管理定时任务。

PHP在线任务调度系统实现指南

项目背景

无论是定期备份数据库,还是定时发送邮件通知,任务调度系统都能高效地自动化这些重复性工作。PHP作为一种广泛使用的编程语言,以其灵活性和易用性成为构建此类系统的理想选择。

系统需求

  1. 任务管理:添加、编辑、删除任务。
  2. 定时执行:支持按指定时间或间隔执行任务。
  3. 日志记录:记录任务执行情况,便于追踪和调试。
  4. 用户界面:友好的Web界面,方便操作和管理。

技术栈

  • 后端:PHP
  • 数据库:MySQL
  • 前端:HTML, CSS, JavaScript(可选使用Bootstrap)

步骤一:环境搭建

首先,确保你的服务器已安装PHP和MySQL。创建一个新的数据库,用于存储任务信息和日志。

CREATE DATABASE task_scheduler;
USE task_scheduler;

CREATE TABLE tasks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    command TEXT NOT NULL,
    schedule VARCHAR(255) NOT NULL,
    last_run DATETIME,
    next_run DATETIME
);

CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    task_id INT,
    run_time DATETIME,
    status VARCHAR(255),
    output TEXT,
    FOREIGN KEY (task_id) REFERENCES tasks(id)
);

步骤二:后端逻辑

任务管理

创建PHP脚本taskManager.php,用于处理任务的增删改查。

<?php
include 'db.php'; // 包含数据库连接文件

function addTask($name, $command, $schedule) {
    $sql = "INSERT INTO tasks (name, command, schedule, next_run) VALUES ('$name', '$command', '$schedule', NOW())";
    return mysqli_query($conn, $sql);
}

function getTasks() {
    $sql = "SELECT * FROM tasks";
    return mysqli_query($conn, $sql);
}

function deleteTask($id) {
    $sql = "DELETE FROM tasks WHERE id=$id";
    return mysqli_query($conn, $sql);
}

// 其他编辑和执行任务的函数...
?>

任务执行

创建cron.php,用于定时检查并执行任务。

<?php
include 'db.php';
include 'taskManager.php';

function runTasks() {
    $tasks = getTasks();
    while ($task = mysqli_fetch_assoc($tasks)) {
        if (time() >= strtotime($task['next_run'])) {
            $output = shell_exec($task['command']);
            logTask($task['id'], $output);
            updateNextRun($task['id'], $task['schedule']);
        }
    }
}

function logTask($task_id, $output) {
    $sql = "INSERT INTO logs (task_id, run_time, status, output) VALUES ($task_id, NOW(), 'Completed', '$output')";
    mysqli_query($conn, $sql);
}

function updateNextRun($task_id, $schedule) {
    // 根据schedule计算下一个执行时间
    $next_run = date('Y-m-d H:i:s', strtotime('+1 hour')); // 示例:每小时执行一次
    $sql = "UPDATE tasks SET last_run=NOW(), next_run='$next_run' WHERE id=$task_id";
    mysqli_query($conn, $sql);
}

runTasks();
?>

步骤三:前端界面

创建简单的HTML表单,用于添加和管理任务。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Task Scheduler</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <h1>Task Scheduler</h1>
    <form action="taskManager.php" method="post">
        <div class="form-group">
            <label for="name">Task Name</label>
            <input type="text" class="form-control" id="name" name="name" required>
        </div>
        <div class="form-group">
            <label for="command">Command</label>
            <input type="text" class="form-control" id="command" name="command" required>
        </div>
        <div class="form-group">
            <label for="schedule">Schedule</label>
            <input type="text" class="form-control" id="schedule" name="schedule" required>
        </div>
        <button type="

评论(0)