Действительно, лучший подход — использовать --env
от Gunicorn, который создает переменную среды в ОС, которую вы можете прочитать и включить данные в свое приложение Python:
В вашем юнит-файле:
ExecStart=/usr/local/bin/gunicorn app:app -b 127.0.0.1:8100 --env GUNICORN_SERVER="127.0.0.1:8100" --pid /run/pysd/pysd.pid --workers=2
В вашем приложении (Flask, например):
import os
from flask import Flask
app = Flask(__name__)
gs = os.getenv('GUNICORN_SERVER')
if gs:
app.config["SERVER_NAME"] = gs
else:
app.config["SERVER_NAME"] = "127.0.0.1:8100"
Спасибо за комментарий, JdeBP. Документация действительно содержит много информации.
Вы можете использовать ps -x --forest
, чтобы определить, есть ли у оболочек в вашем сеансе tmux запущенные дочерние процессы. Если вы хотите сделать это программно, вам, вероятно, следует получить pid вашего tmux, затем перечислить его дочерние оболочки, используя ps --ppid <the tmux pid>
, и, наконец, перечислить их дочерние процессы, используя ту же команду. Быстро и грязно:
ps --ppid $(ps -h -opid:1 --ppid $(ps x | awk ' $5 == "tmux" {print $1}') | tr '\n' ',' | sed 's/,$//')
Однако, если вы знаете pid запущенного вами подпроцесса, вы можете просто проверить, выполняется ли он еще.