# pyTaskScheduler **Repository Path**: errkiller/py-task-scheduler ## Basic Information - **Project Name**: pyTaskScheduler - **Description**: 基于APScheduler的python任务调度器 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-20 - **Last Updated**: 2025-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README # pyTaskScheduler Python定时任务调度器,基于APScheduler库实现,支持多种触发方式(Cron、Interval、Date),并提供了Docker化支持。 ## 功能特性 - 支持多种任务触发方式:Cron表达式、固定时间间隔、指定日期时间 - 任务配置与代码分离,通过`taskConfig.json`文件进行配置 - 完善的日志记录功能 - 支持Docker部署,使用阿里云pip源加速依赖安装 ## 快速开始 ### 环境要求 - Python 3.9+ - Docker(可选) ### 安装依赖 1. 克隆项目到本地: ``` git clone https://gitee.com/errkiller/py-task-scheduler.git cd pyTaskScheduler ``` 2. 安装Python依赖: ``` pip install -r requirements.txt ``` ### 配置任务 #### 把你的任务的所有文件新建一个子目录`taskName`并放到`tasks`目录中 1. 在`tasks\taskName`中提供`main.py`,必须在`main.py`中添加`task_function(task_name)`函数(作为任务执行函数被调用,参数为任务名称)。 2. 在`tasks\taskName`中提供`requirements.txt`文件,用于定义你的任务需要的依赖。 3. 在 `config\taskConfig.json` 文件中配置任务,支持以下触发方式: ### 任务配置说明 以下是定义和描述一个任务所需的各个字段及其含义: - **name**: 任务的唯一标识符,用于在系统中识别任务。例如,`"task1"`表示任务的名称。 #### 触发方式 - **trigger**: 任务的触发方式,决定任务何时执行。支持以下三种触发方式: - `"cron"`: 使用Cron表达式来定义任务的执行时间。 - `"interval"`: 以固定的时间间隔执行任务。 - `"date"`: 在指定的日期和时间执行任务。 #### 具体设置 - **cron_expression**: 当`trigger`为`"cron"`时,使用Cron表达式来定义任务的执行时间。例如,`"0 3 * * *"`表示每天凌晨3点执行。 - **interval**: 当`trigger`为`"interval"`时,定义任务执行的时间间隔(以秒为单位)。例如,`300`表示每5分钟执行一次。 - **run_date**: 当`trigger`为`"date"`时,定义任务执行的日期和时间。例如,`"2025-03-25 08:00:00"`表示在2025年3月25日早上8点执行。 #### 额外信息 - **description**: 任务的描述信息,用于说明任务的作用或目的。例如,`"每天凌晨3点执行"`表示任务每天凌晨3点执行。 - **executions**: 任务执行次数。例如,`0`表示无次数限制。 - **enabled**: 任务是否启用。`true`表示任务启用,`false`表示任务禁用。例如,`"enabled": false`表示任务当前被禁用,不会执行。 示例配置: ``` { "hostName": "my-pyTaskScheduler", "description": "Python任务调度器", "tasks": [ { "name": "task1", "trigger": "cron", "cron_expression": "0 3 * * *", "description": "每天凌晨3点执行", "executions": 0, "enabled": false }, { "name": "task2", "trigger": "interval", "interval": 300, "description": "每5分钟执行一次", "executions": 0, "enabled": false }, { "name": "task3", "trigger": "date", "run_date": "2025-03-25 08:00:00", "description": "在2025年3月25日早上8点执行", "executions": 1, "enabled": false }, { "name": "test_task", "trigger": "interval", "interval": 10, "description": "每10秒执行一次", "executions": 0, "enabled": true }, { "name": "test_task2", "trigger": "interval", "interval": 13, "description": "每10秒执行一次", "executions": 0, "enabled": true } ] } ``` ### 运行程序 在终端中运行以下命令启动调度器: ``` python scheduler.py ``` ### Docker部署 1. 构建Docker镜像: ``` docker build -t pytaskscheduler . ``` 2. 运行Docker容器: ``` docker run -d \ --name pytaskscheduler \ --restart=unless-stopped \ --memory="512m" \ --cpus="1" \ -v ./config:/app/config \ -v ./tasks:/app/tasks \ -v ./logs:/app/logs \ -v ./Tools:/app/Tools \ -v ./scheduler.py:/app/scheduler.py \ -e "TZ=Asia/Shanghai" \ pytaskscheduler ``` --- ## 1.统一日志服务使用说明 ## 概述 `logConfig.py` 是一个用于初始化和配置日志系统的模块,提供了统一的日志管理功能。通过该模块,可以方便地创建按天滚动的日志文件,并支持长时间的日志保留策略。 --- ## 主要功能 1. **日志目录自动创建**:如果指定的日志存储目录不存在,会自动创建。 2. **按天滚动日志**:日志文件每天午夜自动滚动,生成新的日志文件。 3. **日志保留策略**:默认保留最近 180 天的日志文件,超出范围的日志文件会被自动删除。 4. **日志格式化**:日志内容包含时间戳、日志级别和日志消息。 --- ## 使用方法 ### 1. 引入模块 在需要使用日志功能的 Python 文件中,引入 `logConfig.py` 模块: ```python from Tools.logConfig import setup_logging ``` ### 2. 初始化日志记录器 调用 `setup_logging` 函数,传入日志名称和日志存储目录: ```python logger = setup_logging(logger_name='my_logger', log_dir=os.path.join('logs', 'my_logger')) ``` #### 参数说明 - `logger_name` (str): 日志记录器的名称,通常设置为模块名或特定功能名称。 - `log_dir` (str): 存储日志文件的目录路径,可以是相对路径或绝对路径。 ### 3. 使用日志记录器 初始化完成后,可以通过 `logger` 对象记录不同级别的日志信息: ```python logger.info("This is an info message.") logger.warning("This is a warning message.") logger.error("This is an error message.") ``` --- ## 注意事项 1. **日志目录权限**:确保程序运行时对指定的日志目录具有读写权限,否则可能会导致日志写入失败。 2. **日志文件大小**:当前实现未限制单个日志文件的大小,如果日志量较大,可能需要额外配置日志分割策略。 3. **日志清理**:默认保留 180 天的日志文件,可以根据实际需求调整 `backupCount` 参数。 --- --- ## 2.通知服务使用说明 ```markdown # 通知发送函数 `_send_notification` 使用说明 该函数用于根据配置文件中的设置发送通知。配置文件应写入 `config/notify.yml` 中。 ## 函数原型 ```python def _send_notification(taskConfigName: str, subject: str, html_message: str) -> None: ``` ## 参数 - `taskConfigName`: 任务通知的配置键名(从 `config/notify_config.yml` 中读取) - `subject`: 消息主题名称 - `html_message`: 消息内容,HTML 格式 ## 功能描述 此函数负责根据提供的参数和配置文件中的设置来发送通知。它支持多种通知方式,并且可以根据配置动态选择要使用的通知方法。 ### 配置文件结构示例 (`config/notify.yml`) ```yaml your_task_name: enabled: true notify_method: - wxpusher - email wxpusher_uids: - your_wxpusher_uid_1 - your_wxpusher_uid_2 wxpusher_topic_ids: - your_wxpusher_topic_id_1 email_recipients: - example@example.com ``` ### 支持的通知方式 - **WXPusher**: 通过用户ID或话题ID发送微信推送。 - **Email**: 发送电子邮件至指定接收者。 ## 示例调用 引入模块 ```angular2html from Tools.notify import _send_notification ``` 调用函数 ```python _send_notification( taskConfigName='your_task_name', subject='Test Subject', html_message='

Hello World

' ) ``` ## 注意事项 - 确保所有需要的通知服务已经正确配置并且可用。 - 如果某个通知方法未启用,则不会尝试发送通知。 ---