Puncte:0

Cum se transmit variabile pentru un fișier unitar systemd care apelează un script php?

drapel jp

Am nevoie să creez mai multe instanțe ale unui serviciu systemd. Este posibil să treci parametrii la pornirea serviciului, care ar fi parametrii pentru un script php?

De exemplu, să presupunem că am un scenariu, test_systemd.php, cu doi parametri, mod și rem respectiv.

php:

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

?>

Dacă rulez asta prin php, o fac php test_systemd.php --mod foo --rem bar

Care ar avea un ecou

foo
bar

Conform documentelor systemd, ar trebui să folosesc Mediu=, dar nu sunt sigur cum să fac asta. Să presupunem că am un fișier unitar systemd numit test-systemd-params.service:

Descriere=Testul parametrilor sistemului
Wants=network-online.target
După=network-online.target

[Serviciu]
ExecStart=/usr/bin/php -f /path/to/test_systemd.php
StandardOutput=file:/var/log/test-multiple-systemd.log
Mediu=???? <--- CE MERGE AICI?

[Instalare]
#Începe după pornire
WantedBy=multi-user.target

Nu înțeleg de ce am nevoie de locul aici. Este posibil chiar și pentru cei doi parametri (mod și rem) să fie trecut la pornirea unei instanțe a serviciului?

am găsit acest exemplu, și are două Mediu inconjurator linii, dar una dintre ele este o valoare statică! am nevoie Două valori dinamice, cum ar fi:

Mediu=mod=%i Mediu=rem=%i

Exemplul de fragment arată astfel:

[Serviciu]
Tip = notificare
Environment=LANG=C <--- STATIC, dar au nevoie de o altă dinamică
Mediu=HTTPD_INSTANCE=%i <--- dinamic, grozav, dar nevoie de altul
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 $OPTIONS -k grațios -f conf/%i.conf
Chris avatar
drapel it
Exemplul de fragment pe care îl oferiți se referă la [șabloane de servicii](https://www.freedesktop.org/software/systemd/man/systemd.service.html#Service%20Templates). Puteți trece o singură *variabilă* în acest fel *Este posibil ca serviciile systemd să accepte un singur argument prin sintaxa „[email protected]”.*
DevOpsSauce avatar
drapel jp
Deci nu pot avea două argumente pentru scriptul php?
Puncte:0
drapel it

Conform documentelor systemd, ar trebui să folosesc Mediu=, dar eu nu sunt sigur cum să fac asta. Să presupunem că am un fișier de unitate systemd numit test-systemd-params.service:

Acesta este un exemplu de utilizare Mediu=

Descriere=Testul parametrilor sistemului
Wants=network-online.target
După=network-online.target

[Serviciu]
Environment="MOD=foo" "REM=bar"
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

[Instalare]
#Începe după pornire
WantedBy=multi-user.target

Acesta nu este ceea ce căutați, deoarece variabilele sunt valori statice.


am găsit acest exemplu, și are două Mediu inconjurator linii, dar una dintre ele este o valoare statică! am nevoie Două valori dinamice, cum ar fi:

Fragmentul de exemplu pe care îl oferiți se referă șabloane de servicii. Poți trece doar o variabilă Pe aici. Este posibil ca serviciile systemd să accepte un singur argument prin sintaxa „[email protected]”.

Iată un exemplu de implementare

Descriere=Testul parametrilor sistemului
Wants=network-online.target
După=network-online.target

[Serviciu]
Mediu=MOD=%i
Mediu=REM=bară
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

[Instalare]
#Începe după pornire
WantedBy=multi-user.target

Apoi porniți serviciile astfel:

systemctl start [email protected]
systemctl start [email protected]

Deci încă nu este exact ceea ce cauți, pentru că mai ai o variabilă statică.


Singurul mod în care văd (netestat) a trece mai multe variabile ar fi a folosi EnvironmentFile= directive și fișiere de configurare separate cu dinamic nume folosind @argument sintaxe.

[Serviciu]
EnvironmentFile=/path/to/config/%i
ExecStart=/usr/bin/php -f /path/to/test_systemd.php --mod ${MOD} --rem ${REM}
StandardOutput=file:/var/log/test-multiple-systemd.log

Exemplu de fișier de configurare în /cale/spre/config/, sa spunem conf1:

MOD=foo
REM=bar

Apoi porniți serviciile astfel:

systemctl start [email protected]
systemctl start [email protected]
...

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.