
Ofelia是一个基于Go构建的现代化、轻量级Docker环境作业调度器,旨在替代传统的cron。
cron发布至今已超过28年,世界发生了巨大变化,尤其是Docker革命之后。Vixie's cron虽然表现出色,但扩展性差,且出现问题时难以调试。
目前已有许多解决方案:现成的容器化cron、命令包装器等,但最终简单任务往往变得复杂。
Ofelia的主要特性是能够直接在Docker容器中执行命令。通过Docker API,Ofelia模拟exec的行为,可在运行中的容器内执行命令,也可在新容器中运行命令并在执行结束后销毁容器。
https://godoc.org/github.com/robfig/cron%E4%B8%8EGo%E5%AE%9E%E7%8E%B0%E7%9A%84%60cron%60%E7%9B%B8%E5%90%8C%EF%BC%8C%E4%BE%8B%E5%A6%82%60@every 10s或0 0 1 * * *`(每天凌晨1点)。
注意:该格式以秒为起始,而非分钟。
支持四种作业类型:
job-exec:在运行中的容器内执行job-run:使用指定镜像在新容器内运行命令job-local:在运行Ofelia的主机上执行命令job-service-run:在swarm集群中创建"一次性"服务并执行命令有关所有可用参数,参见作业参考文档。
INI风格配置
通过ofelia daemon --config=/path/to/config.ini运行
ini[job-exec "在运行中容器执行的作业"] schedule = @hourly container = my-container command = touch /tmp/example [job-run "在新容器执行的作业"] schedule = @hourly image = ubuntu:latest command = touch /tmp/example [job-local "在当前主机执行的作业"] schedule = @hourly command = touch /tmp/example [job-service-run "在新容器执行的服务"] schedule = 0,20,40 * * * * image = ubuntu network = swarm_network command = touch /tmp/example
Docker标签配置
要使用此配置类型,Ofelia需要访问Docker套接字。
shdocker run -it --rm \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --label ofelia.job-local.my-test-job.schedule="@every 5s" \ --label ofelia.job-local.my-test-job.command="date" \ mcuadros/ofelia:latest daemon --docker
标签格式:ofelia.<作业类型>.<作业名称>.<作业参数>=<参数值>。此配置类型支持INI文件的所有功能。
也可通过在目标容器上设置标签来配置job-exec,需在目标容器上添加ofelia.enabled=true标签。
例如,要让Ofelia在现有容器my_nginx中执行uname -a命令,需启动my_nginx容器时配置:
shdocker run -it --rm \ --label ofelia.enabled=true \ --label ofelia.job-exec.test-exec-job.schedule="@every 5s" \ --label ofelia.job-exec.test-exec-job.command="uname -a" \ nginx
此时启动Ofelia容器将获取两个作业:
dateuname -aDocker Compose示例:
yamlversion: "3" services: ofelia: image: mcuadros/ofelia:latest depends_on: - nginx command: daemon --docker volumes: - /var/run/docker.sock:/var/run/docker.sock:ro labels: ofelia.job-local.my-test-job.schedule: "@every 5s" ofelia.job-local.my-test-job.command: "date" nginx: image: nginx labels: ofelia.enabled: "true" ofelia.job-exec.datecron.schedule: "@every 5s" ofelia.job-exec.datecron.command: "uname -a"
Ofelia提供三种日志驱动,可在[global]部分配置:
mail:发送邮件save:将结构化执行报告保存到目录slack:通过Slack webhook发送消息配置选项
邮件驱动
smtp-host - SMTP服务器地址smtp-port - SMTP服务器端口smtp-user - SMTP服务器登录用户smtp-password - SMTP服务器登录密码email-to - 收件人***地址email-from - 发件人***地址mail-only-on-error - 仅在执行失败时发送邮件保存驱动
save-folder - 报告保存目录save-only-on-error - 仅在执行失败时保存报告Slack驱动
slack-webhook - Slack webhook URLslack-only-on-error - 仅在执行失败时发送Slack消息Ofelia可防止作业并行运行(例如首次执行未完成时再次调度)。若作业设置no-overlap选项,则不会并发执行。
部署Ofelia最简单的方式是使用Docker(参见上述示例)。
若不想使用Docker镜像,可从https://github.com/mcuadros/ofelia/releases%E4%B8%8B%E8%BD%BD%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E3%80%82
项目为何命名为Ofelia?Ofelia是西班牙漫画《莫塔德罗与菲莱蒙》(Mortadelo y Filemón)中的办公室助理。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务