极简、高效的定时任务管理系统,Python + Flask + APScheduler 构建,支持 Docker 部署。
效果图
docker run -d --name task-scheduler -p 5000:5000 -v $(pwd):/app/ admibo/dotask
# 访问 Web 界面
# http://localhost:5000
Cron 表达式(分 时 日 月 星期):
0 2 * * * # 每天凌晨2点
*/30 * * * * # 每30分钟
0 9-18 * * 1-5 # 工作日9-18点每小时
每天定时:每天固定时间执行
循环执行:按固定间隔执行(秒/分钟/小时)
窗口控制:
-)/ 最大化(□)/ 关闭(×)日志显示:
操作:清空 | 复制
特点:临时执行,不保存记录,始终显示日志
点击"🔄 运行中"查看正在执行的任务:
实时日志显示:
任务超时时间:
每天备份数据库(每天定时 02:00):
/usr/bin/mysqldump -u root -ppassword mydb > /backup/mydb_$(date +\%Y\%m\%d).sql
每小时清理临时文件(Cron:0 * * * *):
find /tmp -type f -mtime +7 -delete
每5分钟健康检查(循环执行:300秒):
/path/to/health_check.sh
测试实时日志(演示脚本):
# Docker: /app/demo_realtime_log.sh
# 直接运行: /root/dotask/demo_realtime_log.sh
├── app.py # 主应用
├── requirements.txt # 依赖
├── Dockerfile # Docker配置
├── docker-compose.yml # Docker Compose配置
├── tasks.db # SQLite数据库(自动创建)
├── demo_realtime_log.sh # 演示脚本
├── templates/
│ ├── index.html # 主界面
│ └── log_detail.html # 日志详情
└── README.md
环境变量 TIMEZONE(默认 Asia/Shanghai):
# 直接运行
TIMEZONE=America/New_York python app.py
# Docker
docker run -d -e TIMEZONE=America/New_York -p 5000:5000 task-scheduler
# Docker Compose(修改 docker-compose.yml)
environment:
- TIMEZONE=America/New_York
常用时区:Asia/Shanghai、Asia/Tokyo、America/New_York、Europe/London、UTC
在 app.py 中修改:
TASKS_DB_PATH - 数据库路径host / port - 监听地址和端口SQLite 数据库(tasks.db)包含三个表:
tasks 表:任务配置(id、name、command、schedule_type、schedule_config、enabled)
task_logs 表:执行日志(id、task_id、task_name、command、output、error、exit_code、started_at、finished_at)
settings 表:系统设置(key、value、updated_at)
任务:
GET/POST /api/tasks - 获取/创建任务PUT/DELETE /api/tasks/<id> - 更新/删除任务POST /api/tasks/<id>/run - 立即执行GET /api/tasks/<execution_id>/stream - SSE 实时日志流命令:
POST /api/commands/run - 执行临时命令运行中任务:
GET /api/running_tasks - 获取运行中任务POST /api/running_tasks/<execution_id>/kill - 强制终止日志:
GET /api/logs - 获取日志DELETE /api/logs/<id> - 删除日志POST /api/logs/clear - 清空日志设置:
GET/POST /api/settings/view_mode - 视图模式GET/POST /api/settings/show_realtime_log - 实时日志显示GET/POST /api/settings/task_timeout - 任务超时时间Flask==3.0.0 # Web 框架
APScheduler==3.10.4 # 任务调度
pytz==2024.1 # 时区
任务未执行:检查任务是否启用、调度配置是否正确
任务失败:查看日志错误信息、确认命令路径和权限
时区错误:检查环境变量 TIMEZONE,重启服务
Content type
Image
Digest
sha256:d0c7935a3…
Size
55.5 MB
Last updated
11 months ago
docker pull admibo/dotask