当前位置: 首页 > news >正文

带有WebUI的cron替代品Dagu

在这里插入图片描述

什么是 Dagu ?

Dagu 是一个强大的 Cron 替代品,它带有一个 Web UI。它允许你将命令之间的依赖关系定义为有向无环图(DAG),使用声明式的 YAML 格式。Dagu 的设计易于使用、自包含且无需编码,非常适合小型项目。

安装

在群晖上以 Docker 方式安装。因为镜像发布在 ghcr.io ,所以采用命令行方式安装

需要用 SSH 客户端登录到群晖后再执行

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 dagu 和 子目录
mkdir -p /volume1/docker/dagu/{dags,data,logs}# 进入 dagu 目录
cd /volume1/docker/dagu# 修改目录权限
chmod a+rw {dags,data,logs}# 运行容器
docker run -d \--restart unless-stopped \--name dagu \-p 8210:8080 \-v $(pwd)/dags:/home/dagu/.dagu/dags \-v $(pwd)/data:/home/dagu/.dagu/data \-v $(pwd)/logs:/home/dagu/.dagu/logs \ghcr.io/dagu-dev/dagu:latest \dagu start-all

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'services:dagu:image: ghcr.io/dagu-dev/dagu:latestcontainer_name: dagurestart: unless-stoppedports:- "8210:8080"volumes:- "./dags:/home/dagu/.dagu/dags"- "./data:/home/dagu/.dagu/data"- "./logs:/home/dagu/.dagu/logs"command: ["dagu", "start-all"]

然后执行下面的命令

# 新建文件夹 dagu 和 子目录
mkdir -p /volume1/docker/dagu/{dags,data,logs}# 进入 dagu 目录
cd /volume1/docker/dagu# 将 docker-compose.yml 放入当前目录# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:8210 就能看到主界面

NEW 新建 DAG

输入名称

自动跳转到 SPEC 界面

下拉会看到编辑界面

EDIT 进入编辑模式

粘贴下面的内容

mail 执行器可用于发送电子邮件。这对于发送通知或警报很有用

smtp:host: "smtp.88.com"port: "25"username: "wbsu2003@88.com"password: "<第三方邮件客户端密码>"steps:- name: step1executor:type: mailconfig:to: wbsu2003@hotmail.comfrom: wbsu2003@88.comsubject: "Dagu 测试邮件"message: |Hello world,send by Dagu~- name: step2command: echo done!depends:- step1

SAVE 保存

上拉,找到 START 执行

执行完成

查看日志

如果设置没问题,很快就会收到邮件

进入 FileStation 中,可以看到对应的 yaml 文件

另一种情况是调用脚本文件,举个简单的例子,通过脚本来获取 pm2.5 的值

steps:- name: send_GET_requestcommand: /home/dagu/.dagu/dags/weather.sh

这里比较大的坑是要用容器内的路径,默认 WORKDIR/home/dagu/,所以要用完整的路径

weather.sh 的内容

#!/bin/sh# 设置环境变量
export CITY_ID=101020100# 发送 GET 请求并获取响应体
response=$(curl -s -X GET "http://t.weather.itboy.net/api/weather/city/${CITY_ID}" -H "Authorization: ")# 检查 curl 命令是否成功执行
if [ $? -eq 0 ]; then# 使用 jq 打印 JSON 数据# echo $response | jq .pm25=$(echo $response | jq -r '.data.pm25')  echo "pm25: $pm25"
elseecho "Failed to fetch data"
fi

关于天气的接口,老苏在之前的文章中提过,你只要将 CITY_ID 替换成你所在的城市即可

文章传送门:用Changedetection监控网页的变化

因为是 Dagu 是通过容器安装的,所以需要让 Dagu 支持我们在
脚本中用到的 curljq

首先要用 root 身份进入容器

# 进入容器
docker exec -it -u root dagu /bin/sh

然后在容器中继续执行下面的命令

# 更新包索引
apk update# 安装 curl
apk add curl

# 安装 jq
apk add jq

然后回到 DaguStart

Log 查看

没问题的话,会看到当前的 pm2.5

参考文档

GitHub - dagu-dev/dagu: Yet another cron alternative with a Web UI, but with much more capabilities. It aims to solve greater problems.
地址:https://github.com/dagu-dev/dagu

Dagu — Dagu 文档
地址:https://dagu.readthedocs.io/zh/latest/

Dagu-一个带有Web UI的cron替代品 | Noise&Blog
地址:https://www.noiseblogs.top/posts/a86216b9/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【JavaScript】LeetCode:6-10
  • 【网络安全】服务基础第一阶段——第八节:Windows系统管理基础---- Web服务与虚拟主机
  • 软件单元测试工程模版化
  • 英伟达最新论文解析:剪枝与知识蒸馏 —— 可穿戴AI时代即将到来
  • HarmonyOS ArkUI工程框架解析
  • PHP软件下载-安装-环境配置
  • Unet改进15:添加TripletAttention||减少冗余计算和同时存储访问
  • 如何安装Docker
  • 抽象代数精解【12】
  • C++预处理定义
  • C++中不定参数函数的实现方法
  • AI技术在巴黎奥运会中有哪些应用?
  • 汽车免拆诊断案例 | 2012 款大众速腾车发动机偶尔抖动
  • 【R语言速通】1.数据类型
  • 【Spring Boot 3】【Web】ProblemDetail
  • 【css3】浏览器内核及其兼容性
  • FineReport中如何实现自动滚屏效果
  • javascript面向对象之创建对象
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Node项目之评分系统(二)- 数据库设计
  • Otto开发初探——微服务依赖管理新利器
  • php中curl和soap方式请求服务超时问题
  • Promise面试题2实现异步串行执行
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 初探 Vue 生命周期和钩子函数
  • 二维平面内的碰撞检测【一】
  • 仿天猫超市收藏抛物线动画工具库
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • gunicorn工作原理
  • 带你开发类似Pokemon Go的AR游戏
  • (06)Hive——正则表达式
  • (5)STL算法之复制
  • (Java入门)抽象类,接口,内部类
  • (k8s)Kubernetes本地存储接入
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (分布式缓存)Redis分片集群
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (五)c52学习之旅-静态数码管
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (一)VirtualBox安装增强功能
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • **CI中自动类加载的用法总结
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core 成都线下面基会拉开序幕
  • .NET WPF 抖动动画
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • @Autowired 和 @Resource 区别的补充说明与示例
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [C#]winform部署yolov9的onnx模型