查看: 788|回复: 49

[IOS] 【开源】LiteCron v1.0 轻量级定时任务调度器

[复制链接]

545

主题

0

回帖

906

积分

UID
4
贡献
9 点
钻石
99 个
C币
8 个
发表于 2026-2-12 17:52:00 | 显示全部楼层 |阅读模式
LiteCron

轻量级定时任务调度器,基于 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: "OST"
    完整示例见 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


    手动构建并启动容器
    # 构建并启动
    python manage.py build
    python manage.py start

    # 查看状态
    python manage.py status
    4. 访问 Web 界面
    打开浏览器访问:http://localhost:5000

    使用指南
    管理脚本
    manage.py 提供交互式菜单和命令行两种使用方式:
    交互式菜单(推荐)
    python manage.py              # 启动交互式菜单

    命令行模式
    # 容器管理
    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: "OST"
        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 - 容器化技术

    -------------------------

    🔗 链接:

  • 项目地址

  • 问题反馈
  • 温馨提示:
    1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
    2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
    3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
    4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
    5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
    6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
    回复

    使用道具 举报

    0

    主题

    377

    回帖

    0

    积分

    UID
    924685
    贡献
    0 点
    钻石
    0 个
    C币
    0 个
    发表于 2026-2-16 18:04:52 | 显示全部楼层
    这个角度之前没想过,记下来了。
    回复

    使用道具 举报

    0

    主题

    390

    回帖

    53

    积分

    UID
    737295
    贡献
    0 点
    钻石
    0 个
    C币
    1 个
    发表于 2026-2-21 06:09:13 | 显示全部楼层
    整理得挺系统,看得出花了不少功夫。
    回复

    使用道具 举报

    0

    主题

    362

    回帖

    362

    积分

    UID
    594571
    贡献
    0 点
    钻石
    0 个
    C币
    2 个
    发表于 2026-2-27 13:27:18 | 显示全部楼层
    分析得挺到位,把关键因素都点出来了。
    回复

    使用道具 举报

    0

    主题

    379

    回帖

    0

    积分

    UID
    871168
    贡献
    0 点
    钻石
    0 个
    C币
    0 个
    发表于 2026-3-3 06:04:28 | 显示全部楼层
    分析得挺到位,把关键因素都点出来了。有没有后续?想蹲一个更新。
    回复

    使用道具 举报

    0

    主题

    346

    回帖

    43

    积分

    UID
    296568
    贡献
    0 点
    钻石
    0 个
    C币
    1 个
    发表于 2026-3-7 12:44:36 | 显示全部楼层
    写得挺细致的,能看出是实操过的。
    回复

    使用道具 举报

    0

    主题

    350

    回帖

    0

    积分

    UID
    625795
    贡献
    0 点
    钻石
    0 个
    C币
    0 个
    发表于 2026-3-13 00:35:30 | 显示全部楼层
    信息量挺足的,看了一遍还想再看一遍。
    回复

    使用道具 举报

    0

    主题

    378

    回帖

    378

    积分

    UID
    942185
    贡献
    0 点
    钻石
    0 个
    C币
    1 个
    发表于 2026-3-16 23:41:43 | 显示全部楼层
    这种一手经验的分享比二手转述有价值多了。
    回复

    使用道具 举报

    0

    主题

    376

    回帖

    0

    积分

    UID
    855179
    贡献
    0 点
    钻石
    0 个
    C币
    0 个
    发表于 2026-3-21 21:29:39 | 显示全部楼层
    楼主说得挺实在,比那些空谈概念的强。有没有后续?想蹲一个更新。
    回复

    使用道具 举报

    0

    主题

    385

    回帖

    41

    积分

    UID
    404479
    贡献
    0 点
    钻石
    0 个
    C币
    1 个
    发表于 2026-3-24 22:59:00 | 显示全部楼层
    这个话题最近讨论得挺多,但像这样讲清楚的少。想请教下有没有推荐的上手路径?
    回复

    使用道具 举报

    温馨提示:
    1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
    2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
    3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
    4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
    5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
    6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
    您需要登录后才可以回帖 登录 | 立即加入

    本版积分规则

    QQ客服返回顶部