python - systemd : `airflow.pid` vs `airflow-monitor.pid` 的 Airflow

标签 python systemd airflow

我的 systemd 单元文件正在运行(如下)。

但是 airflow-monitor.pid 文件暂时变为只读,这有时会阻止 Airflow 启动。如果发生这种情况,我们的解决方法是删除 airflow-monitor.pid。这与 airflow.pid 不同。

看起来 airflow.pid 是 gunicorn 而 airflow-monitor.pid 是一个作为 airflow 网络服务器的 python 进程。

系统单元文件:

[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]
# by default we just set $AIRFLOW_HOME to its default dir: $HOME/airflow , so lets skip this for now
EnvironmentFile=/home/airflow/airflow/airflow.systemd.environment

#WorkingDirectory=/home/airflow/airflow-venv
#Environment=PATH="/home/airflow/airflow-venv/bin:$PATH"
PIDFile=/home/airflow/airflow/airflow.pid
User=airflow
Group=airflow
Type=simple
# this was originally the file webserver.pid but did not run
#ExecStart=/bin/bash -c 'source /home/airflow/airflow-venv/bin/activate ; /home/airflow/airflow-venv/bin/airflow webserver -p 8080 --pid /home/airflow/airflow/airflow.pid --daemon'
#ExecStart=/home/airflow/airflow-venv/bin/airflow webserver -p 8080 --pid /home/airflow/airflow/airflow.pid --daemon
ExecStart=/usr/local/bin/airflow webserver -p 8080 --pid /home/airflow/airflow/airflow.pid --daemon
Restart=on-failure
RestartSec=5s
PrivateTmp=true

[Install]
WantedBy=multi-user.target

这里是 pid 文件的输出:

airflow@airflow:~$ cat airflow/airflow.pid 
8397 
airflow@airflow:~$ cat     airflow/airflow-monitor.pid 
8377 
airflow@airflow:~$ ps faux | grep 8377 
airflow 26004 0.0 0.0 14224 976 pts/0 S+ 18:05 0:00 | \_ grep --color=auto 8377 airflow 8377 0.4 1.0 399676 83804 ? Ss Aug23 6:14 /usr/bin/python /usr/local/bin/airflow webserver -p 8080 --pid /home/airflow/airflow/airflow.pid --daemon 
airflow@airflow:~$ ps faux | grep 8397 
airflow 26028 0.0 0.0 14224 940 pts/0 R+ 18:05 0:00 | \_ grep --color=auto 8397 airflow 8397 0.0 0.6 186652 55496 ? S Aug23 0:32 gunicorn: master [airflow-webserver]

最佳答案

不太确定为什么 airflow-monitor.pid 变成只读的,但是您可以通过不使用 --daemon 运行网络服务器来完全避免此 pid 文件。我认为 systemd 没有必要。

相关代码块:https://github.com/apache/incubator-airflow/blob/master/airflow/bin/cli.py#L754-L765

关于python - systemd : `airflow.pid` vs `airflow-monitor.pid` 的 Airflow ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45868397/

相关文章:

python - dtach 在 systemd 服务文件中

postgresql - Postgres systemd 单元文件如何确定要运行的 Postgres 版本?

logging - Airflow KubernetesPodOperator 1.10.12 - 记录了任务启动信息,但没有来自容器的标准输出

python - 为什么终止此子进程会引发 ProcessLookupError?

python - cv2::imshow 的参数

python - 如何获取多个未定义列不为空的 pandas DataFrame 的第一个索引?

linux - 阻止服务启动

Python:从其他地方导入?

python-3.x - 无法启动调度程序

Python 算法挑战?