Je sais que je déterre un post qui date un peu, mais j'essayais moi aussi de comprendre comment je pouvais configurer les variables PATH/environnement pour que le planificateur s'exécute automatiquement lorsque le serveur est en cours d'exécution.
J'ai trouvé une solution qui fonctionne pour moi sur Ubuntu 18.04 et 18.10.
J'ai fourni une description complète de la façon de installer Airflow et PostgreSQL sur le backend sur le lien ici .
**Extrait de la suite de mon article Il s'agit essentiellement d'apporter une modification spécifique au fichier airflow-scheduler.system.
C'est l'un des "gotchas" pour une implémentation sur Ubuntu. L'équipe de développement qui a créé Airflow l'a conçu pour fonctionner sur une distribution linux différente et il y a donc un petit (mais critique) changement qui doit être fait pour qu'Airflow s'exécute automatiquement lorsque le serveur est allumé. Les fichiers de service systemd par défaut ressemblent initialement à ceci :
[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
Cependant, cela ne fonctionnera pas car le protocole 'EnvironmentFile' ne fonctionne pas sur Ubuntu 18. A la place, commentez cette ligne et ajoutez :
Environment="PATH=/home/ubuntu/anaconda3/envs/airflow/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Vous voudrez probablement créer un fichier de service systemd au moins pour l'Airflow Scheduler et probablement aussi pour le Webserver si vous voulez que l'interface utilisateur se lance automatiquement. En effet, nous voulons les deux dans cette implémentation, nous allons donc créer deux fichiers, airflow-scheduler.service & airflow-webserver.service. Ces deux fichiers seront copiés dans le dossier /etc/systemd/system. Ces fichiers sont les suivants :
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/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
Enfin, ces deux fichiers ayant été copiés dans le dossier /etc/systemd/systemd à l'aide de la commande de copie sudo cp du superutilisateur, il est temps de mettre le contact :
sudo systemctl enable airflow-scheduler sudo systemctl start airflow-scheduler sudo systemctl enable airflow-webserver sudo systemctl start airflow-webserver