Рейтинг:0

Как передать переменные для файла модуля systemd, который вызывает php-скрипт?

флаг jp

Мне нужно создать несколько экземпляров службы systemd. Можно ли передать параметры при запуске службы, которые будут параметрами для php-скрипта?

Например, допустим, у меня есть сценарий, test_systemd.php, с двумя параметрами, мод и бэр соответственно.

PHP:

<?php
$val = getopt(null, ['mod:','rem:']);
echo $val['mod']."\n";
echo $val['rem']."\n";
echo "\n";

?>

Если я запускаю это через php, я просто делаю php test_systemd.php --mod foo --rem бар

Что будет эхом

фу
бар

Согласно документам systemd, я должен использовать Окружающая среда =, но я не уверен, как это сделать. Допустим, у меня есть файл модуля systemd с именем тест-systemd-params.service:

Description=Systemd Params Test
Хочет=network-online.target
After=network-online.target

[Оказание услуг]
ExecStart=/usr/bin/php -f /path/to/test_systemd.php
StandardOutput=файл:/var/log/test-multiple-systemd.log
Окружающая среда=???? <--- ЧТО ЗДЕСЬ?

[Установить]
#Запустить после загрузки
WantedBy=многопользовательская.цель

Я не понимаю, что мне здесь нужно. Возможно ли это даже для двух параметров (мод и бэр) для передачи при запуске экземпляра службы?

я нашел это пример, и он имеет два Среда строк, но одна из них является статическим значением! я нуждаюсь два динамические значения, такие как:

Окружающая среда=mod=%i Окружающая среда=rem=%i

Фрагмент примера выглядит так:

[Оказание услуг]
Тип=уведомить
Environment=LANG=C <--- STATIC, но нужен другой динамический
Environment=HTTPD_INSTANCE=%i <--- динамический, отличный, но нужен другой
ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i
ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i
ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-%i
ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-%i
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/%i.conf
ExecReload=/usr/sbin/httpd $ОПЦИИ -k изящно -f conf/%i.conf
Chris avatar
флаг it
Фрагмент примера, который вы даете, относится к [шаблонам услуг] (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Service%20Templates). Таким образом вы можете передать только одну *переменную* *Службы systemd могут принимать один аргумент с помощью синтаксиса «[email protected]».*
DevOpsSauce avatar
флаг jp
Значит, у меня не может быть двух аргументов для php-скрипта?
Рейтинг:0
флаг it

Согласно документам systemd, я должен использовать Окружающая среда =, но я я не уверен, как это сделать. Допустим, у меня есть файл модуля systemd. называется тест-systemd-params.service:

Это пример использования Окружающая среда =

Description=Systemd Params Test
Хочет=network-online.target
After=network-online.target

[Оказание услуг]
Окружающая среда = «MOD = foo» «REM = бар»
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=файл:/var/log/test-multiple-systemd.log

[Установить]
#Запустить после загрузки
WantedBy=многопользовательская.цель

Это не то, что вы ищете, потому что переменные являются статическими значениями.


я нашел это пример, и он имеет два Среда строк, но одна из них является статическим значением! я нуждаюсь два динамические значения, такие как:

Фрагмент примера, который вы даете, относится к шаблоны услуг. Вы можете пройти только одна переменная Сюда. Службы systemd могут принимать один аргумент с помощью синтаксиса «[email protected]».

Вот пример реализации

Description=Systemd Params Test
Хочет=network-online.target
After=network-online.target

[Оказание услуг]
Окружающая среда=MOD=%i
Окружающая среда=REM=бар
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=файл:/var/log/test-multiple-systemd.log

[Установить]
#Запустить после загрузки
WantedBy=многопользовательская.цель

Затем вы запускаете службы следующим образом:

systemctl запустить [email protected]
systemctl запустить [email protected]

Так что это все еще не совсем то, что вы ищете, потому что у вас все еще есть одна статическая переменная.


Единственный способ, которым я вижу (не испытано) для передачи нескольких переменных было бы использовать Файл Окружающей Среды = директивы и отдельные файлы конфигурации с динамичный имя с помощью @аргумент синтаксис

[Оказание услуг]
EnvironmentFile=/path/to/config/%i
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=файл:/var/log/test-multiple-systemd.log

Пример файла конфигурации в /путь/к/конфигурации/, скажем конф1:

МОД=фу
REM=бар

Затем вы запускаете службы следующим образом:

systemctl запустить [email protected]
systemctl запустить [email protected]
...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.