【开源】LiteCron v1.0 轻量级定时任务调度器
LiteCronhttps://www.metk.cn/img/posts/52pj/70d6f332854a0bf6eef4f534347077a6.png
轻量级定时任务调度器,基于 Docker 运行 Python 脚本。
核心功能
[*]🐳 Docker 化部署 - 一键启动,环境隔离
[*]⏰ Cron 表达式 - 灵活配置定时规则
[*]🐍 Python 脚本 - 原生支持 Python 3.11+
[*]🌐 Web 管理界面 - 浏览器中查看状态和管理任务
[*]🔔 通知系统 - 支持 Webhook 和 NTFY 多种通知方式
[*]📊 执行日志 - 自动记录任务输出
[*]🔒 环境变量 - 安全的配置管理
目录结构
lite-cron/
├── 📄 config.yml # 任务配置文件
├── 📄 config.example.yml # 配置示例文件
├── 🐳 Dockerfile # 镜像构建文件
├── 🐳 compose.yml # 容器编排配置
├── 🐳 compose.example.yml # 容器编排配置示例
├── 📜 manage.py # 管理脚本(Python实现,支持交互式菜单)
├── 📝 requirements.txt # Python 依赖
├── 📁 src/ # 源代码目录
│ ├── webapp.py # Web 管理界面(Flask)
│ ├── notify.py # 通知模块
│ ├── make_cron.py # 生成 crontab 配置文件
│ ├── make_env.py # 生成环境变量配置文件
│ ├── task_wrapper.py # 任务执行包装器(Python)
│ ├── entrypoint.sh # 容器启动入口
│ ├── 📁 template/ # HTML 模板目录
│ │ └── index.html # 主页面模板
│ └── 📁 static/ # 静态资源目录
│ ├── app.js # 前端交互逻辑
│ └── style.css # 样式文件
├── 📁 tasks/ # 任务脚本目录(项目内置,可手动添加新脚本)
│ ├── smzdm.py # 什么值得买签到
│ ├── tieba.py # 百度贴吧签到
│ ├── fnclub.py # 飞牛Nas论坛签到
│ └── aliyunpan.py # 阿里云盘签到
├── 📁 data/ # 持久化数据目录
└── 📁 logs/ # 运行时日志目录
快速开始
环境要求
软件
最低版本
推荐版本
Docker
20.10+
24.0+
Docker Compose
2.0+
2.20+
Python
3.8+
3.11+
Git
任意
最新
1. 克隆项目
git clone https://github.com/pdone/lite-cron.git
cd lite-cron
2. 配置任务
复制并编辑配置文件:
cp config.example.yml config.yml
vim config.yml
示例配置:
tasks:
- name: "ExampleTask"
schedule: "0 2 * * *" # 每天凌晨2点
script: "tasks/example.py"
description: "示例任务"
enabled: true
env:
API_KEY: "your_key"
# 通知配置
notify:
on_failure: true
webhook:
url: "https://hooks.example.com/send"
method: "POST"
完整示例见 config.example.yml
3. 启动容器
使用 Docker Compose
推荐可以使用我构建好的镜像,修改 compose.yml 中 image: lite-cron:latest 改为 image: pdone/lite-cron:latest,也可以自行构建。
cp compose.example.yml compose.yml
docker compose up -d
完整示例见 compose.example.yml
https://www.metk.cn/img/posts/52pj/15c259f1d66a4e60ed5700b0f2ef2dad.png
手动构建并启动容器
# 构建并启动
python manage.py build
python manage.py start
# 查看状态
python manage.py status
4. 访问 Web 界面
打开浏览器访问:http://localhost:5000
使用指南
管理脚本
manage.py 提供交互式菜单和命令行两种使用方式:
交互式菜单(推荐)
python manage.py # 启动交互式菜单
https://www.metk.cn/img/posts/52pj/535d963b744e4af4f2168a27c0c803e8.png
命令行模式
# 容器管理
python manage.py start # 启动容器
python manage.py stop # 停止容器
python manage.py restart # 重启容器
python manage.py status # 查看状态
python manage.py logs # 查看日志
python manage.py shell # 进入容器
python manage.py reload # 重新加载配置
# 任务执行
python manage.py list # 查看定时任务计划
python manage.py run TaskName # 执行指定任务
python manage.py run --all # 执行所有已启用任务
python manage.py tasklogs # 查看任务日志
python manage.py validate # 验证配置
# 系统维护
python manage.py build # 构建镜像
python manage.py build v1.0.0 # 构建并指定标签
python manage.py build --no-cache # 强制重新安装依赖
python manage.py update # 更新项目
python manage.py clean # 清理旧日志
python manage.py notify "消息" # 发送测试通知
python manage.py help # 查看帮助
编写任务脚本
参考 tasks/example.py:
#!/usr/bin/env python3
"""
任务描述:一句话说明任务功能
"""
import os
import sys
import logging
from datetime import datetime
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# 从环境变量读取配置
API_KEY = os.environ.get('API_KEY')
def main():
"""主函数:任务逻辑"""
try:
logger.info("🚀 任务开始")
# 任务逻辑
logger.info("📋 执行操作...")
result = do_something(API_KEY)
if result:
logger.info("✅ 任务成功")
return 0
else:
logger.warning("⚠️ 任务失败")
return 1
except Exception as e:
logger.error(f"❌ 任务异常: {str(e)}")
return 1
finally:
logger.info("🏁 任务结束")
def do_something(api_key: str) -> bool:
"""业务逻辑函数"""
# 实现你的任务逻辑
return True
if __name__ == '__main__':
sys.exit(main())
配置说明
任务配置
字段
说明
示例
name
任务名称(唯一)
"DailyCheck"
schedule
Cron 表达式
"0 9 * * *"
script
脚本路径
"tasks/job.py"
description
任务描述
"每日签到"
enabled
是否启用
true / false
env
专属环境变量
KEY: "value"
Cron 表达式
* * * * *
│ │ │ │ └── 星期 (0-7, 0和7都代表星期日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日期 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)
常用 Cron 示例
表达式
说明
0 2 * * *
每天凌晨 2 点
*/5 * * * *
每 5 分钟
0 9 * * 1
每周一上午 9 点
30 4 * * 0,6
每周六和周日凌晨 4:30
0 */3 * * *
每 3 小时
0 0 1 * *
每月第一天
0 0 * * 0
每周日午夜
在线工具: Crontab Guru - Cron 表达式在线生成器和验证
通知配置
Webhook
notify:
webhook:
url: "https://hooks.example.com/send"
method: "POST"
content_type: "application/json"
headers: |
Authorization: Bearer your_token
NTFY
notify:
ntfy:
url: "https://ntfy.sh"
topic: "lite-cron"
priority: "3"
username: "user"
password: "pass"
故障排查
容器无法启动
# 检查端口是否被占用
netstat -tlnp | grep 5000
# 查看详细错误
docker compose logs
# 检查配置文件语法
python manage.py validate
任务没有执行
# 1. 查看容器状态
python manage.py status
# 2. 检查容器日志
python manage.py logs
# 3. 验证 cron 表达式
python manage.py list
# 4. 确认任务已启用
# 检查 config.yml 中 enabled: true
通知没有收到
[*]验证 config.yml 中的通知配置
[*]检查 Webhook URL 是否可访问
[*]确认 NTFY 服务器配置正确
[*]发送测试通知:
python manage.py notify "消息" # 发送测试通知
python manage.py notify "消息" -l # 发送测试通知附带最近 15 行日志
python manage.py notify "消息" -l -n 30 # 发送测试通知附带最近 30 行日志
python manage.py notify "消息" --log-lines 20 # 同上,使用长参数
python manage.py help # 查看帮助
查看日志
# 查看容器日志
python manage.py logs
# 查看任务日志
python manage.py tasklogs
性能优化
容器优化
[*]使用 python:3.11-slim 减少镜像体积
[*]使用 --no-cache-dir 减少 pip 安装体积
[*]合理设置健康检查间隔
任务优化
[*]避免长时间阻塞的任务
[*]使用连接池复用 HTTP 连接
[*]设置合理的超时时间
日志优化
[*]定期清理旧日志:python manage.py clean
[*]生产环境使用 INFO 日志级别
[*]监控日志文件大小
与类似项目对比
特性
LiteCron
Airflow
Celery
Cron
部署复杂度
⭐ 简单
⭐⭐⭐ 复杂
⭐⭐ 中等
⭐ 简单
Web UI
✅ 内置
✅ 强大
❌ 需额外配置
❌ 无
Python 原生
✅
✅
✅
❌
轻量级
✅
❌
❌
✅
通知系统
✅ 内置
⚠️ 需配置
⚠️ 需配置
❌
适合场景
个人/小型项目
大型企业
中型项目
简单定时
LiteCron 适合:
[*]个人服务器自动化
[*]小型项目的定时任务
[*]需要简单 Web 界面的场景
[*]Docker 化部署环境
贡献指南
欢迎提交 Pull Request 或 Issue!
提交 PR
[*]Fork 本项目
[*]创建分支:git checkout -b feature/xxx
[*]提交更改:git commit -m "feat 添加新功能"
[*]推送分支:git push origin feature/xxx
[*]创建 Pull Request
常用提交信息参考
前缀
含义
示例
feat
新功能(feature)
feat 添加用户登录功能
fix
修复 bug
fix 修复首页加载缓慢问题
docs
文档变更
docs 更新 API 文档
style
代码格式调整(不影响代码逻辑)
style 统一缩进为2空格
refactor
重构(既不修复bug也不添加功能)
refactor 优化订单模块代码结构
perf
性能优化
perf 减少首屏加载时间
test
添加或修改测试
test 增加用户模块单元测试
chore
构建/工具/依赖等杂项
chore 升级 webpack 到 v5
ci
CI/CD 配置变更
ci 修改 GitHub Actions 配置
build
构建系统或外部依赖变更
build 添加 docker 支持
revert
回滚提交
revert 回滚 feat: 添加支付功能
代码规范
[*]📝 使用中文注释
[*]🎯 函数添加类型注解
[*]⏱️ 记录开始/结束时间
[*]🎨 使用 emoji 标记日志
[*]🚪 返回 0(成功)或 1(失败)
许可证
MIT License
致谢
[*]Flask - Web 框架
[*]Croniter - Cron 表达式解析
[*]Docker - 容器化技术
-------------------------
🔗 链接:
[*]项目地址
[*]问题反馈 这个角度之前没想过,记下来了。 整理得挺系统,看得出花了不少功夫。 分析得挺到位,把关键因素都点出来了。 分析得挺到位,把关键因素都点出来了。有没有后续?想蹲一个更新。 写得挺细致的,能看出是实操过的。 信息量挺足的,看了一遍还想再看一遍。 这种一手经验的分享比二手转述有价值多了。 楼主说得挺实在,比那些空谈概念的强。有没有后续?想蹲一个更新。 这个话题最近讨论得挺多,但像这样讲清楚的少。想请教下有没有推荐的上手路径?