【问题标题】:How to run airflow scheduler as a daemon process?如何将气流调度程序作为守护进程运行?
【发布时间】:2017-01-15 22:38:16
【问题描述】:

我是 Airflow 的新手。我正在尝试将气流调度程序作为守护进程运行,但该进程不会持续很长时间。我已经在airflow.cfg 文件中配置了“LocalExecutor”并运行以下命令来启动调度程序。(我正在使用Google 计算引擎并通过PuTTY 访问服务器)

airflow scheduler --daemon --num_runs=5 --log-file=/root/airflow/logs/scheduler.log

当我运行此命令时,气流调度程序启动,我可以在气流主文件夹中看到气流调度程序.pid 文件,但该过程不会持续很长时间。当我关闭 PuTTY 会话并重新连接到服务器时,我找不到调度程序进程。我错过了什么吗?如何将气流调度程序作为守护进程运行?

【问题讨论】:

    标签: google-compute-engine scheduler airflow


    【解决方案1】:

    我遇到了类似的问题。 当我将调度程序作为守护进程执行时,我的气流调度程序没有继续作为守护进程运行:

    airflow scheduler -D
    

    但是当我正常运行调度程序时,它确实工作了。在我删除了 airflow-scheduler.err 文件并将调度程序作为守护进程重新运行后,它开始工作:

    rm airflow-scheduler.err
    airflow scheduler -D
    

    【讨论】:

    • 我也不得不删除airflow-scheduler.pid
    【解决方案2】:

    您可以按照此处所述使用 systemd 或 upstart:

    https://github.com/apache/incubator-airflow/tree/master/scripts/systemd https://github.com/apache/incubator-airflow/tree/master/scripts/upstart

    这里有说明,以防万一将来链接断开。

    提供的 systemd 文件在基于 RedHat 的系统上进行了测试。将它们复制(或链接)到 /usr/lib/systemd/system 并将airflow.conf 复制到/etc/tmpfiles.d/ 或/usr/lib/tmpfiles.d/。复制气流.conf 确保 /run/airflow 是 使用正确的所有者和权限创建(0755 气流)

    然后您可以使用 systemctl start 启动不同的服务器。启用服务可以通过发布来完成

    systemctl enable [service]

    默认情况下,环境配置指向 /etc/sysconfig/airflow 。您可以在此复制“气流”文件 目录并根据自己的喜好进行调整。确保指定 SCHEDULER_RUNS 变量。

    经过一些小的改动,它们可能适用于其他 systemd 系统。

    您可以修改下面提供的配置文件以反映您的环境

    /etc/sysconfig/airflow 文件的内容

    # This file is the environment file for Airflow. Put this file in /etc/sysconfig/airflow per default
    # configuration of the systemd unit files.
    #
    # AIRFLOW_CONFIG=
    # AIRFLOW_HOME=
    #
    # required setting, 0 sets it to unlimited. Scheduler will get restart after every X runs
    SCHEDULER_RUNS=5
    

    /etc/tmpfiles.d/airflow.conf 或 /usr/lib/tmpfiles.d/airflow.conf 文件的内容

    D /run/airflow 0755 airflow airflow

    /usr/lib/systemd/system/airflow-scheduler.service 的内容

    [Unit]
    Description=Airflow scheduler daemon
    After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service
    Wants=postgresql.service mysql.service redis.service rabbitmq-server.service
    
    [Service]
    EnvironmentFile=/etc/sysconfig/airflow
    User=airflow
    Group=airflow
    Type=simple
    ExecStart=/bin/airflow scheduler -n ${SCHEDULER_RUNS}
    KillMode=process
    Restart=always
    RestartSec=5s
    
    [Install]
    WantedBy=multi-user.target
    

    【讨论】:

    • 由于链接将来可能会断开,因此在您的回答中包含与回答此问题相关的信息对您非常有用。
    • 感谢您的反馈,cavpollo。我已经添加了所有相关信息。
    【解决方案3】:

    --num-runs=5 将使调度程序运行任务实例 5 次。您可以删除该参数以使调度程序长时间运行。

    理想情况下,您应该在主管下运行该调度程序,因此当进程崩溃/停止时,它将重新运行。

    【讨论】:

    • Ideally you should run that scheduler under supervisor, so when..;我猜[Service] description 中的Restart=always 正是这样做的
    最近更新 更多