У меня есть systemd сервис, который называет Сценарий PHP, который создает a tmux
сессия на начальной загрузке.
Глобально у меня есть актуальнейшее tmux
для дистрибутива (V> =2.5).
Сценарий USER
имеет a $HOME/bin/tmux
из 2,0
То, в чем я нуждаюсь, для этого systemd
использовать tmux
двоичный файл в $HOME пользователя.
Я установил ПОЛЬЗОВАТЕЛЯ и переменные ГРУППЫ в systemd сервисном файле, но это, кажется, называет глобально установленный двоичный файл.
Действительно ли возможно явно установить двоичный файл, который нужно назвать для этого сервисного вызова?
Если возможный я не запустил бы к hardcode путь в самом файле PHP.
Большое спасибо.
Это кажется ужасно hackish, но предварительно ожидающий a $PATH
обновление, кажется, работает.
Я в поисках побочных эффектов как бы то ни было...
Пример:
ExecStart=/bin/bash -c "PATH=/home/someUser/bin:$PATH exec /usr/bin/php /some/path/to/a/script.php"
Я знаю, что вскапываю немного датированное сообщение, но я также пытался выяснить, как я мог настроить ПУТЬ/ПЕРЕМЕННЫЕ СРЕДЫ так thaty, я мог заставить планировщик работать автоматически, когда сервер работает.
я действительно находил решение, которое работает на меня на Ubuntu 18.04 и 18.10
, которую я обеспечил полной рецензии как к установка Airflow и PostgreSQL на бэкенде на ссылке здесь .
** от более поздней части моей статьи Essentially это сводится к внесению определенного изменения в файл потока-воздуха-scheduler.system.
Это - один из вЂgotchas’ для реализации на 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’ протоколом doesn’t муха на Ubuntu 18. Вместо этого прокомментируйте ту строку и включите:
Environment="PATH=/home/ubuntu/anaconda3/envs/airflow/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Вы, вероятно, захотите создать systemd сервисный файл, по крайней мере, для Планировщика Airflow и также вероятно, веб-сервера, если Вы захотите, чтобы UI запустился автоматически также. Действительно мы действительно хотим обоих в этой реализации, таким образом, мы будем создавать два файла, поток-воздуха-scheduler.service & поток-воздуха-webserver.service. Оба из которых будут скопированы в/etc/systemd/system папку. Это следующие:
<час>[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
<час> [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
Наконец, с обоими из тех файлов, скопированных в/etc/systemd/systemd папку посредством копии суперпользователя, управляет sudo CP, пора поразить воспламенение:
sudo systemctl включают планировщик потока воздуха sudo systemctl, запускаются, планировщик потока воздуха sudo systemctl включают веб-сервер потока воздуха sudo systemctl, запускают веб-сервер потока воздуха
Вы могли hardcode PATH
в systemd сервисе:
[Service]
Environment=PATH=/home/someUser/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Более гибкий был бы PAM. Это является ужасно окольным по сравнению с простым использованием bash -c '....'
, но можно сделать это с PAM.
Создайте новую конфигурацию PAM в /etc/pam.d
(скажите /etc/pam.d/foo
) и добавьте:
session required pam_env.so user_envfile=some-file user_readenv=1
И в /home/someUser/some-file
, добавьте:
PATH DEFAULT=/home/someUser/bin:${PATH}
Конечно, можно корректироваться some-file
назовите к чему-то более разумному, но пути в user_envfile
должен быть относительно корневого каталога пользователя (пользователь, что Вы начинаетесь User=
в сервисе).
Затем в сервисном файле, в [Service]
разделите, добавьте (foo
будучи файлом в /etc/pam.d
созданный ранее):
PAMName=foo
Теперь, когда Вы запускаете сервис (после перезагрузки, и т.д.), session
модули в /etc/pam.d/foo
будет выполнен, который в этом случае справедлив pam_env
. pam_env
загрузит переменные среды из /etc/environment
Согласно ограничениям в /etc/security/pam_env.conf
, и затем пользовательская среда от ~/some-file
. С тех пор PATH
установлен на значение по умолчанию в /etc/environment
, пользовательская среда предварительно ожидает к этому значению по умолчанию.
Здесь, значение по умолчанию user_envfile
.pam_environment
, который также читается конфигурацией PAM других вещей как SSH или вход в систему LightDM и т.д. Я использовал другой файл здесь в случае, если Вы не хотите влиять на эти вещи. Вы могли удалить user_envfile=...
и используйте значение по умолчанию ~/.pam_environment
. Вы могли также просто использовать существующую конфигурацию PAM в /etc/pam.d
который имеет user_readenv=1
, но другие модули PAM могут вызвать нежелательные побочные эффекты.
В сервисе я настраивал (Поток воздуха Apache), мне установили Файл Среды.
В моем /etc/systemd/system/airflow
файл, у меня была эта строка:
[Service]
EnvironmentFile=/etc/default/airflow
Открывая этот файл среды, я добавил строку, в которой я нуждался в моем случае:
SCHEDULER_RUNS=5
PATH=/opt/anaconda3/bin:$PATH
Добавьте любые пути к исполняемым файлам, необходимо смочь быть достигнутыми сервисом здесь, и необходимо быть в порядке. Работавший хорошо для меня.