华为云函数工作流 FunctionGraph:用定时触发器替代常驻 Cron 服务的完整做法
很多团队都有一台只跑定时任务的服务器:上面挂着几条 crontab,凌晨跑清理、同步、对账。服务器一重启、一次磁盘告警、一次时区改动,都可能让定时任务悄悄停摆。把这类任务迁到华为云函数工作流 FunctionGraph,用定时触发器驱动函数执行,是更省心的替代方式。
一、哪些任务适合搬
适合搬的任务执行时间短、可以重复执行、不依赖本机状态,例如每天凌晨清理过期临时文件、每小时拉取接口数据写入数据库。需要常驻运行、监听端口、保持长连接的服务不适合直接搬,先拆成定时触发加分片处理的形态再迁移。
二、五步上线
第一步,在 FunctionGraph 控制台新建函数,选择熟悉的运行环境,例如 Python,填写函数名和入口函数名,例如 index.handler,上传代码包。配置统一放在环境变量里,密钥不要写进代码或日志。
第二步,写好任务代码,重点是幂等和异常处理:
def handler(event, context):
batch_id = event.get("batch_id") or today()
try:
deleted = cleanup_expired_files(batch_id)
print(f"batch {batch_id} deleted {deleted} files")
except Exception as e:
print(f"batch {batch_id} failed: {e}")
raise
return {"batch_id": batch_id, "deleted": deleted}
第三步,在函数详情页新建定时触发器,选择按 Cron 表达式触发。例如每天凌晨 2 点执行,可以写 0 2 * * *。不同服务对 Cron 表达式段数的约定可能不同,填写时以控制台页面上的格式说明为准。
第四步,核对时区。表达式里的时间按哪个时区解释,直接决定任务几点跑。如果控制台默认使用 UTC,而业务要求北京时间凌晨 2 点,就把表达式换算成对应的 UTC 时间,或选择支持的北京时间选项。
第五步,验证。先手动触发一次确认执行成功,再把触发器时间临时改成几分钟后,观察是否按时触发、日志是否正常、业务结果是否正确,通过后再改回正式时间。
三、从 crontab 迁移的对照
原来 crontab -e 里的一行,对应触发器里的一条规则:0 2 * * * clean.sh 对应每天凌晨 2 点的触发器;*/10 * * * * sync.py 对应每 10 分钟的触发器;0 9 * * 1 report.py 对应每周一上午 9 点的触发器。迁移时逐条核对:脚本里的相对路径、环境变量和工作目录,在函数里都要显式处理。
四、五个注意事项
幂等是第一位:触发器可能因重试让一次任务执行多次,写库、发消息等操作必须能用唯一批次标识去重。超时按实际耗时留余量,太小会中途被打断。重试要设上限,避免把一次故障放大成多次重复操作。日志要带上批次标识和触发时间,方便定位某一次执行。给执行失败配置告警,定期看一次成功率和耗时趋势,不要等业务方反馈才发现任务停了。
五、上线前核对清单
函数手动执行一次通过;触发器表达式和时区已二次核对;用临时时间验证过一次真实触发;日志里能看到批次标识和执行结果;失败告警已配置;原服务器上的 crontab 已注释或删除,避免新旧两套任务重复执行。
用定时触发器替代常驻 Cron 服务,本质是把机器一直开着等时间到,换成时间到了平台来叫醒函数。任务越短小、独立、可重复,收益越明显;先从最不重要的一条定时任务开始迁移,跑稳一周再搬下一条。
- 点赞
- 收藏
- 关注作者
评论(0)