'use client'; import { useState, useEffect } from 'react'; interface TaskStatus { name: string; running: boolean; } export default function TasksPage() { const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [message, setMessage] = useState(''); useEffect(() => { fetchTasks(); }, []); const fetchTasks = async () => { try { const response = await fetch('/api/tasks?action=status'); const data = await response.json(); setTasks(data.tasks || []); } catch (error) { console.error('Failed to fetch tasks:', error); setMessage('获取任务状态失败'); } finally { setLoading(false); } }; const handleAction = async (action: string, taskName?: string) => { try { const response = await fetch('/api/tasks', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ action, taskName }), }); const data = await response.json(); setMessage(data.message || '操作完成'); // 刷新任务状态 await fetchTasks(); } catch (error) { console.error('Failed to perform action:', error); setMessage('操作失败'); } }; if (loading) { return (
加载中...
); } return (

定时任务管理

{message && (
{message}
)}

任务列表

{tasks.length === 0 ? (
没有找到定时任务
) : (
{tasks.map((task) => ( ))}
任务名称 状态 描述 操作
{task.name} {task.running ? '运行中' : '已停止'} {task.name === 'hourlyTask' && '每小时第30分钟执行'} {task.name === 'dailyCleanup' && '每日凌晨2点清理任务'}
)}

Cron 表达式说明

30 * * * * - 每小时的第30分钟执行
0 2 * * * - 每天凌晨2点执行
0 */2 * * * - 每2小时执行一次
0 9 * * 1-5 - 周一到周五上午9点执行
0 0 1 * * - 每月1号凌晨执行
*/15 * * * * - 每15分钟执行一次
); }