gpt4 book ai didi

ubuntu - 尝试使用 systemd 在 ubuntu 服务器上运行 apache Airflow

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:44 26 4
gpt4 key购买 nike

我正在尝试运行 airflow在带有 systemd 的 ubuntu 服务器上.我遵循了 Airflow 文档中的快速入门指南和教程,我已经成功安装 Airflow 并使用以下命令成功运行它:

airflow webserver -p 8080

在安装 systemd 并使用 configuration files 进行大量试验和错误之后我设法使用命令让 Airflow 运行
sudo systemctl start airflow

Airflow 一直运行一周,直到今天我用命令重新启动它
sudo systemctl restart airflow

运行 sudo systemctl status airflow现在给我以下两条消息之一:
● airflow.service - Airflow webserver daemon
Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Wed 2018-09-12 09:23:01 UTC; 1s ago
Process: 3115 ExecStart=/opt/miniconda3/bin/airflow webserver -p 8080 --pid /home/user/airflow/airflow-webserver.pid --daemon (code=exited, status=1/FAILURE)
Main PID: 3115 (code=exited, status=1/FAILURE)

Sep 12 09:23:01 server-service systemd[1]: airflow.service: Main process exited, code=exited, status=1/FAILURE
Sep 12 09:23:01 server-service systemd[1]: airflow.service: Unit entered failed state.
Sep 12 09:23:01 server-service systemd[1]: airflow.service: Failed with result 'exit-code'.

或者
● airflow.service - Airflow webserver daemon
Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-09-12 09:23:54 UTC; 1s ago
Main PID: 3399 (airflow)
Tasks: 1
Memory: 56.1M
CPU: 1.203s
CGroup: /system.slice/airflow.service
└─3399 /opt/miniconda3/bin/python /opt/miniconda3/bin/airflow webserver -p 8080 --pid /home/user/airflow/airflow-webserver.pid --daemon

Sep 12 09:23:54 server-service systemd[1]: Stopped Airflow webserver daemon.
Sep 12 09:23:54 server-service systemd[1]: Started Airflow webserver daemon.
Sep 12 09:23:54 server-service airflow[3399]: [2018-09-12 09:23:54,372] {__init__.py:57} INFO - Using executor SequentialExecutor
Sep 12 09:23:55 server-service airflow[3399]: ____________ _____________
Sep 12 09:23:55 server-service airflow[3399]: ____ |__( )_________ __/__ /________ __
Sep 12 09:23:55 server-service airflow[3399]: ____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /| / /
Sep 12 09:23:55 server-service airflow[3399]: ___ ___ | / _ / _ __/ _ / / /_/ /_ |/ |/ /
Sep 12 09:23:55 server-service airflow[3399]: _/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/
Sep 12 09:23:55 server-service airflow[3399]:
Sep 12 09:23:55 server-service airflow[3399]: [2018-09-12 09:23:55,124] [3399] {models.py:167} INFO - Filling up the DagBag from /root/airflow/dags

我认为当 systemd 无法启动 Airflow 时返回第一条消息,而当 systemd 仍在启动 Airflow 的过程中时返回第二条消息。

由于第一条错误消息包含 airflow.service: Service hold-off time over, scheduling restart.我想我可能有 this problem , 但正在运行 sudo systemctl enable airflow.service不能解决问题(我认为还是启用了airflow.service,如此处所示: Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled))。

在尝试解决问题时,我发现了一些我不明白的奇怪事情:
  • 根据airflow quick start page ,手动运行 Airflow 将创建一个名为 airflow-webserver.pid 的文件在 Airflow 主页中,使用 systemd 运行 Airflow 时,将创建一个名为 webserver.pid 的文件在 /run/airflow目录。最初,当我尝试使用 systemd 运行 Airflow 时,我注意到 /run/airflow/webserver.pid没有创建。设置PIDFile=/home/user/airflow/airflow-webserver.pid解决了问题;系统使用 airflow-webserver.pid 中提供的工作进程 pid 运行 Airflow 。文件。但是现在我已经运行了 sudo systemctl restart airflow那不再起作用了;运行 airflow webserver -p 8080不创建 airflow-webserver.pid我指出的。
  • 由于运行 Airflow 不再自动创建 /run/airflow/webserver.pid/home/user/airflow/airflow-webserver.pid文件我试图在所需的目录中手动创建它们。但是如果我在创建 /run/airflow/webserver.pid 之后使用 systemd 运行 Airflow 文件,它会被删除(而不是替换),如果我使用 airflow webserver -p 8080 手动运行 Airflow 创建 /run/airflow/webserver.pid 之后文件,然后该文件被删除。

  • 我的 airflow.service文件如下所示:
    [Unit]
    Description=Airflow webserver daemon
    After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service

    [Service]
    EnvironmentFile=/etc/sysconfig/airflow
    PIDFile=/home/user/airflow/airflow-webserver.pid
    User=%i
    Group=%i
    Type=simple
    ExecStart=/opt/miniconda3/bin/airflow webserver -p 8080 --pid /home/user/airflow/airflow-webserver.pid --daemon

    Restart=on-failure
    RestartSec=5s
    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target

    问题:如何解决这些问题,以便让 Airflow 与 systemd 一起运行?

    编辑:再次重新启动 systemd 守护程序后,我设法让 Airflow 运行(或者至少看起来如此)。运行 systemctl status airflow返回:
    ● airflow.service - Airflow webserver daemon
    Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled)
    Active: active (running) since Wed 2018-09-12 10:49:17 UTC; 6min ago
    Main PID: 30054
    Tasks: 0
    Memory: 388.0K
    CPU: 2.987s
    CGroup: /system.slice/airflow.service

    Sep 12 10:49:22 server-service airflow[30031]: File "/opt/miniconda3/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
    Sep 12 10:49:22 server-service airflow[30031]: reraise(type(exception), exception, tb=exc_tb, cause=cause)
    Sep 12 10:49:22 server-service airflow[30031]: File "/opt/miniconda3/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
    Sep 12 10:49:22 server-service airflow[30031]: raise value.with_traceback(tb)
    Sep 12 10:49:22 server-service airflow[30031]: File "/opt/miniconda3/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    Sep 12 10:49:22 server-service airflow[30031]: context)
    Sep 12 10:49:22 server-service airflow[30031]: File "/opt/miniconda3/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
    Sep 12 10:49:22 server-service airflow[30031]: cursor.execute(statement, parameters)
    Sep 12 10:49:22 server-service airflow[30031]: sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: connection [SQL: 'SELECT connection.conn_id AS connection_conn_id \nFROM connection G
    Sep 12 10:49:23 server-service systemd[1]: airflow.service: Supervising process 30054 which is not our child. We'll most likely not notice when it exits.
    lines 1-19/19 (END)

    不幸的是,我无法在浏览器中访问 Airflow 。此外,使用 systemd 或手动启动 Airflow 不会产生所需文件 /run/airflow/webserver.pid/home/user/airflow/airflow-webserver.pid .我试图用 sudo find ~/ -type f -name "webserver.pid" 检查它们是否存在于其他地方但这不会返回任何东西。

    我认为该消息 Supervising process 30054 which is not our child. We'll most likely not notice when it exits.与我的问题有关,因为过去 Airflow 与 systemd 成功运行时它没有收到此消息。难道是 systemctl status airflow表示 Airflow 已经运行了 6 分钟,因为 systemd 没有注意到 pid 为 30054 的工作人员不再处于事件状态?

    编辑 2:我发现了为什么 airflow-webserver.pid “不是由 Airflow 产生的”。当你运行 airflow webserver -p 8080 Airflow 确实会创建 .pid 文件,但是当您停止网络服务器时,systemd 会再次删除 .pid 文件(如果 Airflow 本身不这样做)。这解释了为什么 airflow-webserver.pid不在那里,但它没有解释为什么 webserver.pid不在 /run/airflow 中目录。

    最佳答案

    我知道我正在挖掘一个稍微过时的帖子,但我也试图弄清楚为什么我无法让调度程序在服务器运行时自动运行。

    我确实在 Ubuntu 18.04 和 18.10 上找到了适合我的解决方案,所以希望这会有所帮助。

    我提供了有关如何 install Airflow and PostgreSQL 的完整文章在链接的后端 here .

    **来自我文章的后半部分
    本质上,它归结为对airflow-scheduler.system 文件进行特定更改。

    这是在 Ubuntu 上实现的“陷阱”之一。创建 Airflow 的开发团队将其设计为在不同的 linux 发行版上运行,因此需要进行一个小的(但关键的)更改,以便 Airflow 将在服务器开启时自动运行。默认的 systemd 服务文件最初如下所示:

    [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
    Restart=always
    RestartSec=5s

    [Install]
    WantedBy=multi-user.target

    但是,这将不起作用,因为“EnvironmentFile”协议(protocol)不在 Ubuntu 18 上运行。相反,注释掉该行并添加:
    Environment="PATH=/home/ubuntu/anaconda3/envs/airflow/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    您可能希望至少为 Airflow Scheduler 创建一个 systemd 服务文件,如果您希望 UI 也自动启动,也可能为 Webserver 创建一个。事实上,我们在这个实现中确实需要这两个文件,所以我们将创建两个文件,airflow-scheduler.service 和airflow-webserver.service。两者都将被复制到/etc/systemd/system 文件夹。这些如下:

    Airflow 调度程序服务
    [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/default/airflow
    Environment="PATH=/home/ubuntu/anaconda3/envs/airflow/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    User=airflow
    Group=airflow
    Type=simple
    ExecStart=/home/ubuntu/anaconda3/envs/airflow/bin/airflow scheduler
    Restart=always
    RestartSec=5s

    [Install]
    WantedBy=multi-user.target
    #airflow-webserver.service

    Airflow -webserver.service
    [Unit]
    Description=Airflow webserver 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/default/airflow
    Environment="PATH=/home/ubuntu/anaconda3/envs/airflow/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    User=airflow
    Group=airflow
    Type=simple
    ExecStart=/home/ubuntu/anaconda3/envs/airflow/bin/airflow webserver -p 8085 --pid /home/ubuntu/airflow/airflow-webserver.pid
    Restart=on-failure
    RestartSec=5s
    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target

    最后,通过 super 用户复制命令 sudo cp 将这两个文件复制到/etc/systemd/systemd 文件夹,是时候点火了:

    sudo systemctl 启用 Airflow 调度程序
    sudo systemctl 启动 Airflow 调度程序
    sudo systemctl 启用 Airflow 网络服务器
    sudo systemctl 启动 Airflow 网络服务器

    关于ubuntu - 尝试使用 systemd 在 ubuntu 服务器上运行 apache Airflow ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52292591/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com