[ PROMPT_NODE_26834 ]
scheduled-jobs
[ SKILL_DOCUMENTATION ]
# 定时任务与 Cron
## 基础调度
安排函数在固定的时间间隔或特定时间自动运行。
### 简单的每日调度
python
import modal
app = modal.App()
@app.function(schedule=modal.Period(days=1))
def daily_task():
print("运行每日任务")
# 处理数据、发送报告等。
部署以激活:
bash
modal deploy script.py
函数将从部署时间起每 24 小时运行一次。
## 调度类型
### 周期调度 (Period Schedules)
从部署时间起按固定间隔运行:
python
# 每 5 小时
@app.function(schedule=modal.Period(hours=5))
def every_5_hours():
...
# 每 30 分钟
@app.function(schedule=modal.Period(minutes=30))
def every_30_minutes():
...
# 每天
@app.function(schedule=modal.Period(days=1))
def daily():
...
**注意**:重新部署会重置周期计时器。
### Cron 调度
使用 cron 语法在特定时间运行:
python
# 每周一 UTC 时间上午 8 点
@app.function(schedule=modal.Cron("0 8 * * 1"))
def weekly_report():
...
# 纽约时间每天上午 6 点
@app.function(schedule=modal.Cron("0 6 * * *", timezone="America/New_York"))
def morning_report():
...
# 每小时整点
@app.function(schedule=modal.Cron("0 * * * *"))
def hourly():
...
# 每 15 分钟
@app.function(schedule=modal.Cron("*/15 * * * *"))
def quarter_hourly():
...
**Cron 语法**: `分 时 日 月 周`
- 分: 0-59
- 时: 0-23
- 日: 1-31
- 月: 1-12
- 周: 0-6 (0 = 周日)
### 时区支持
为 cron 调度指定时区:
python
@app.function(schedule=modal.Cron("0 9 * * *", timezone="Europe/London"))
def uk_morning_task():
...
@app.function(schedule=modal.Cron("0 17 * * 5", timezone="Asia/Tokyo"))
def friday_evening_jp():
...
## 部署
### 部署定时函数
bash
modal deploy script.py
定时函数将持续运行,直到被显式停止。
### 程序化部署
python
if __name__ == "__main__":
app.deploy()
## 监控
### 查看执行日志
访问 https://modal.com/apps 查看:
- 过去执行的日志
- 执行历史
- 失败通知
### 手动运行
通过仪表板的“立即运行 (Run now)”按钮立即触发定时函数。
## 调度管理
### 暂停调度
调度无法直接暂停。若要停止:
1. 移除 `schedule` 参数
2. 重新部署应用
### 更新调度
修改调度参数并重新部署:
python
# 从每日更新为每周