1

Dagobah 简介

Dagobash 是用 python 编写的一个简单的基于依赖关系的作业调度器。 Dagobah 允许你使用 Cron 语法安排调度工作,你可以非常简单的通过 web 界面点击拖动来定义每个工作的一系列任务的依赖关系。

Dagobash 可以让你重试失败的单个任务,给你发送有用的工作任务成功和失败的报告,并且可以在多种后台持久化你的数据,这样你就不用担心你的数据丢失了。

github 项目地址:Dagobah

安装

我的基础环境:

Linux

RedHat
CentOS 5.8
2.6.18-308.el5 x86_64  GNU/Linux

Python 版本

Python 2.7

SQLite 安装

pip install pysqlite sqlalchemy alembic

注:这样直接安装 sqlite 可能失败,所以需要先安装下一下软件

yum install sqlite*

MongoDB 安装

pip install pymongo

dagobahd 安装

pip install dagobah

注:在我的现有环境,这样安装的时候,启动 dagobah 会报错,主要是 lxml 软件依赖的 libxml2 在 CentOS 5.8 的默认版本太低(应该哈)

错误为:

和 etree.so 这个动态依赖包相关

查看其依赖关系

 ldd  /usr/local/lib/python2.7/site-packages/lxml/etree.so

结果

        linux-vdso.so.1 =>  (0x00007fff11af1000)
        libxslt.so.1 => /usr/lib64/libxslt.so.1 (0x00002b32a90c9000)
        libexslt.so.0 => /usr/lib64/libexslt.so.0 (0x00002b32a92ff000)
        libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00002b32a9511000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x00002b32a985c000)
        libm.so.6 => /lib64/libm.so.6 (0x00002b32a9a71000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b32a9cf4000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b32a9f10000)
        libgcrypt.so.11 => /usr/lib64/libgcrypt.so.11 (0x00002b32aa26a000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b32aa4dc000)
        libgpg-error.so.0 => /usr/lib64/libgpg-error.so.0 (0x00002b32aa6e0000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003084e00000)

可以看到 libxml2.so.2 是依赖的老的 /usr/lib64/ 下面的包。

解决办法

  1. 源码安装 libxml2 和 libxslt
wget http://xmlsoft.org/sources/libxml2-2.9.0.tar.gz
tar -zxvf libxml2-2.9.0.tar.gz
cd libxml2-2.9.0
./configure
make
sudo make install

wget http://xmlsoft.org/sources/libxslt-1.1.27.tar.gz
tar -zxvf libxslt-1.1.27.tar.gz
./configure
make
sudo make install

2、把 安装的 lxml2 导出

export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH 
  1. 安装 lxml
pip install lxml

4、查看依赖关系

[root@solr]# ldd  /usr/local/lib/python2.7/site-packages/lxml/etree.so
        linux-vdso.so.1 =>  (0x00007fff11af1000)
        libxslt.so.1 => /usr/lib64/libxslt.so.1 (0x00002b32a90c9000)
        libexslt.so.0 => /usr/lib64/libexslt.so.0 (0x00002b32a92ff000)
        libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x00002b32a9511000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x00002b32a985c000)
        libm.so.6 => /lib64/libm.so.6 (0x00002b32a9a71000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b32a9cf4000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b32a9f10000)
        libgcrypt.so.11 => /usr/lib64/libgcrypt.so.11 (0x00002b32aa26a000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b32aa4dc000)
        libgpg-error.so.0 => /usr/lib64/libgpg-error.so.0 (0x00002b32aa6e0000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003084e00000)

可以看到其依赖关系已经变成 libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x00002b32a9511000)

4、再次安装 dagobah

pip install dagobah

5、启动 dagobah

./dagobah

dagobah 的默认端口是 9000

在启动的时候,其会生成一个配置文件 ~/.dagobahd.yml

Dagobahd:

  # host and port for the Flask app. set host to 0.0.0.0 to listen on all IPs
  host: 127.0.0.1
  port: 9000

  # the app's secret key, used for maintaining user sessions
  # WARNING: change this to your own random value!
  # an easy way to create a key with python is "import os; os.urandom(24)"
  app_secret: 'g\xde\xf5\x06@K\xf5:\x1fmZ\xac\x1fO\xe8\xcd\xde\xcf\x90\xaeY7\x8c\x96'

  # credentials for single-user auth
  auth_disabled: False
  password: dagobah

  # choose one of the available backends
  # None: Dagobah will not use a backend to permanently store data
  # sqlite: use a SQLite database. see the SQLite section in this file
  # mongo: store results in MongoDB. see the MongoBackend section in this file
  backend: sqlite

  # choose one of the available email templates
  # None: Dagobah won't send you emails when a job finishes or fails
  # text: Simple text format
  # basic: Simple, tabular HTML email
  email: basic

Logging:

  # change to False to disable logging entirely
  enabled: True

  # specify a full path to the log file
  # alternatively, specify "default" to log to a file in the dagobahd directory
  logfile: default

  # specify the log level to use
  # choose one of [debug, info, warning, error, critical]
  loglevel: info

Email:

  # set host and port of the SMTP server to use to send mail
  # e.g. host: smtp.gmail.com   port: 587
  host: smtp.gmail.com
  port: 587

  # email server authentication
  user: None
  password: None

  # tls is required for some mail servers, specifically Gmail
  use_tls: True

  # from address in the emails from Dagobah.
  # supports the following special variables within curly brackets {}
  # {HOSTNAME}: the machine's hostname
  from_address: dagobah@{HOSTNAME}

  # list of email addresses to send reports to, e.g. ['myemail@gmail.com']
  recipients: []

  # sets whether Dagobah sends you emails on successful job completion
  send_on_success: True

  # sets whether Dagobah sends you emails on job and task failures
  send_on_failure: True

SQLiteBackend:

  # specify a full path to the sqlite database file
  # alternatively, specify "default" to create a database file in the dagobahd directory
  filepath: default

MongoBackend:

  # connection details to a mongo database
  host: localhost
  port: 27017
  db: dagobah

  # names of collections within the db specified above
  dagobah_collection: dagobah
  job_collection: dagobah_job
  log_collection: dagobah_log

如果不想使用默认的端口和IP的话,可以修改配置文件

6、访问 Dagobah

在浏览器中输入 http://ip:port

以下截图借用官方的图片

登录

密码在配置文件中

请输入图片描述

添加 job

请输入图片描述

在 job 下添加任务

请输入图片描述

指定任务直接的依赖关系

这个点击任务的图片,然后拖动,就可以画出任务直接的关系了

注:定义任务依赖关系后,好像如果一个任务失败的话,后续的任务还是会继续执行,这个如果我是强关系的话,会有点问题。这个先标注下,后续好好研究下。

请输入图片描述

给远程主机添加任务

请输入图片描述

注:因为我们使用 pip install dagobah 安装的版本(CentOS 5.8) 是不支持远程服务器的任务添加功能了,所以需要使用源码安装

源码安装 Dagobah

从 github 上获取源码

git clone https://github.com/thieman/dagobah.git

python setup.py install

为了能配置远程的服务器,你需要配置 SSH config

官方的关于 SSH config 文档地址

vim ~/.ssh/config

加入以下信息

# Contents of ~/.ssh/config
Host test2
     HostName 192.168.0.1
     User root
     IdentityFile ~/.ssh/id_rsa
Host test1
     HostName 192.168.0.2
     User root
     IdentityFile ~/.ssh/id_rsa

注: test2 是主机 192.168.0.1 的别名

配置 ssh 的免密,使用命令 ssh-keygenssh-copy-id,你懂的,详细过程就不介绍了

启动 dagobah

dagobahd

注:dagobah 安装后,其命令路径为 /usr/local/bin/dagobahd

缺陷

  • 不能定义 job 和 job 之间的依赖关系
  • 不能定义 task 和 job 之间的依赖关系
  • task 和 task 依赖的话,如果中间的 task 失败,后续的 task 依然可以继续执行,其设计的原则是一个任务失败,不影响整体任务的执行,但是如果我是强依赖,这样就会有问题

yexiaobai
4.8k 声望875 粉丝

就是不告诉你 O(∩_∩)O哈哈~。


引用和评论

0 条评论