Как я добавляю ~ / мусорное ведро для СОЕДИНЕНИЯ КАНАЛОМ для systemd сервиса?

У меня есть systemd сервис, который называет Сценарий PHP, который создает a tmux сессия на начальной загрузке.

Глобально у меня есть актуальнейшее tmux для дистрибутива (V> =2.5).
Сценарий USER имеет a $HOME/bin/tmux из 2,0

То, в чем я нуждаюсь, для этого systemd использовать tmux двоичный файл в $HOME пользователя.
Я установил ПОЛЬЗОВАТЕЛЯ и переменные ГРУППЫ в systemd сервисном файле, но это, кажется, называет глобально установленный двоичный файл.

Действительно ли возможно явно установить двоичный файл, который нужно назвать для этого сервисного вызова?

Если возможный я не запустил бы к hardcode путь в самом файле PHP.

Большое спасибо.

6
задан 12 November 2018 в 03:53

4 ответа

Это кажется ужасно hackish, но предварительно ожидающий a $PATH обновление, кажется, работает.
Я в поисках побочных эффектов как бы то ни было...

Пример:

ExecStart=/bin/bash -c "PATH=/home/someUser/bin:$PATH exec /usr/bin/php /some/path/to/a/script.php"
1
ответ дан 23 November 2019 в 07:27

Я знаю, что вскапываю немного датированное сообщение, но я также пытался выяснить, как я мог настроить ПУТЬ/ПЕРЕМЕННЫЕ СРЕДЫ так 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 папку. Это следующие:

<час>

поток-воздуха-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
<час>

поток-воздуха-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, запускают веб-сервер потока воздуха

1
ответ дан 23 November 2019 в 07:27

Вы могли 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 могут вызвать нежелательные побочные эффекты.

6
ответ дан 23 November 2019 в 07:27

В сервисе я настраивал (Поток воздуха Apache), мне установили Файл Среды.

В моем /etc/systemd/system/airflow файл, у меня была эта строка:

[Service]
EnvironmentFile=/etc/default/airflow

Открывая этот файл среды, я добавил строку, в которой я нуждался в моем случае:

SCHEDULER_RUNS=5
PATH=/opt/anaconda3/bin:$PATH

Добавьте любые пути к исполняемым файлам, необходимо смочь быть достигнутыми сервисом здесь, и необходимо быть в порядке. Работавший хорошо для меня.

3
ответ дан 23 November 2019 в 07:27

Другие вопросы по тегам:

Похожие вопросы: