wiki:python_systemd
To jest stara wersja strony!
Pliki service dla aplikacji Pythonowych zainstalowanych przez pip w virtualenvie, na przykładzie aplikacji Airflow, opartej na Flask.
Virtualenv został utworzony w katalogu /data/airflow/app. Airflow ma prawa zapisu do katalogu /data/airflow/app/airflow_home, gdzie ma swój katalog roboczy.
mkdir -p /data/airflow/app/airflow_home cd /data/airflow/app python3 -m venv . source bin/activate pip install apache-airflow pip freeze export AIRFLOW_HOME=/data/www/airflow/app/airflow_home airflow initdb
Użytkownik airflow potrzebuje:
- odczytywać katalog /data/www/airflow/app/*
- zapisywać w katalogu /data/www/airflow/app/airflow_home/*,
- uruchamiać pliki z /data/www/airflow/app/bin/*, z wyjątkiem plików pip*, które można zresztą usunąć.
/etc/systemd/system/airflow-webserver.service
[Unit] Description=Airflow Webserver [Service] # Aplikacja dziala na uzytkowniku airflow. User=airflow # Przekierowanie komunikatow aplikacji bezposrednio do journald. Environment=PYTHONUNBUFFERED=1 # Ustawienie pythonowego virtualenv. Environment=VIRTUALENV=/data/airflow/app Environment=PYTHONPATH=$VIRTUALENV/lib:$PYTHONPATH # PATH nie rozumie zmiennych, wiec trzeba podac pelne sciezki. Environment=PATH=/data/airflow/app/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # Roboczy katalog airflow. Environment=AIRFLOW_HOME=$VIRTUALENV/airflow_home # To musi byc pelna sciezka, bez uzywania zmiennych. WorkingDirectory=/data/airflow/app/bin # Start aplikacji (musi zawierac pelna sciezke). ExecStart=/data/airflow/app/bin/airflow webserver --host 0.0.0.0 --port 8899 # Automatyczny restart aplikacji po awarii z opoznieniem 10 sekund, # aby uniknac obciazenia CPU w razie nieudanych uruchomien. #Restart=always Restart=on-failure RestartSec=10 # Powiadomienie systemd o uruchomieniu aplkacji. Type=simple # Plik z numerem ID procesu. PIDFile=$AIRFLOW_HOME/airflow-webserver.pid [Install] # Autostart aplikacji. WantedBy=default.target After=netfork.target
/etc/systemd/system/airflow-scheduler.service
[Unit] Description=Airflow Scheduler [Service] # Aplikacja dziala na uzytkowniku airflow. User=airflow # Przekierowanie komunikatow aplikacji bezposrednio do journald. Environment=PYTHONUNBUFFERED=1 # Ustawienie pythonowego virtualenv. Environment=VIRTUALENV=/data/airflow/app Environment=PYTHONPATH=$VIRTUALENV/lib:$PYTHONPATH # PATH nie rozumie zmiennych, wiec trzeba podac pelne sciezki. Environment=PATH=/data/airflow/app/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # Roboczy katalog airflow. Environment=AIRFLOW_HOME=$VIRTUALENV/airflow_home # To musi byc pelna sciezka, bez uzywania zmiennych. WorkingDirectory=/data/airflow/app/bin # Start aplikacji (musi zawierac pelna sciezke). ExecStart=/data/airflow/app/bin/airflow scheduler # Automatyczny restart aplikacji po awarii z opoznieniem 10 sekund, # aby uniknac obciazenia CPU w razie nieudanych uruchomien. #Restart=always Restart=on-failure RestartSec=10 # Powiadomienie systemd o uruchomieniu aplkacji. Type=simple [Install] # Autostart aplikacji. WantedBy=default.target After=netfork.target, airflow-webserver.service Wants=airflow-webserver.service
wiki/python_systemd.1605604152.txt.gz · ostatnio zmienione: 2022/08/18 11:44 (edycja zewnętrzna)