在当今快节奏的开发环境中,任务调度系统是不可或缺的工具。本文将带你一步步用PHP构建一个简易但功能强大的在线任务调度系统,助你轻松管理定时任务。
项目背景
无论是定期备份数据库,还是定时发送邮件通知,任务调度系统都能高效地自动化这些重复性工作。PHP作为一种广泛使用的编程语言,以其灵活性和易用性成为构建此类系统的理想选择。
系统需求
- 任务管理:添加、编辑、删除任务。
- 定时执行:支持按指定时间或间隔执行任务。
- 日志记录:记录任务执行情况,便于追踪和调试。
- 用户界面:友好的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)