Skocz do zawartości
  • Cześć!

    Witaj na forum RootNode - aby pisać u nas musisz się zarejestrować, a następnie zalogować. Posty pisane z kont niezarejestrowanych nie są widoczne publicznie.

systemd - Jedna usługa wiele różnych instancji


Desavil
 Udostępnij

Rekomendowane odpowiedzi

Cześć. Muszę dodać pewne oprogramowanie jako usługę. Używam systemu Debian 9, więc skłaniam się ku systemd.

Program ten uruchamia się za pomocą polecenia:

/usr/local/bin/program ID
np.:
/usr/local/bin/program 85

Problem polega na tym, że wymienione ID stale się zmienia, a dodatkowo jest ich dosyć sporo. Dlatego chciałbym się dowiedzieć, czy istnieje jakaś możliwość na stworzenie jednej usługi, jednak z możliwością przekazywania do niej dodatkowych argumentów/argumentu, w tym przypadku byłoby nim ID? Przy uruchamianiu chciałbym, aby wyglądało to mniej więcej tak:

systemctl start program -id 85

 

Do czego tego potrzebuję?

Muszę uruchamiać ten program z poziomu php-fpm (serwer na nginx), program ten  (jego różne instancje) działa w tle i jeżeli wykonam restart php-fpm (np. z powodu aktualizacji) wszystkie procesy uruchomione za jego pomocą są zabijane. Dlatego chcę znaleźć jakieś rozwiązanie tego problemu, a jak się dowiedziałem jednym z nich może być uruchomienie programu jako usługi. Chyba, że ktoś ma pomysł na jeszcze inne rozwiązanie, które tutaj mogłoby się sprawdzić?

 

Dzięki za wskazówki.

Edytowane przez Desavil
Odnośnik do komentarza
Udostępnij na innych stronach

Systemd nie przyjmuje dodatkowych parametrów, ale możesz to trochę obejść stosując EnvironmentFile gdzie będą te ID, lub pokrętnie zrobić to w ten sposób.

 

Przykładowo:

/lib/systemd/system/rootnode.service
[Unit]
Description=test

[Service]
EnvironmentFile=/root/test.conf
ExecStart=/root/test.sh

[Install]
WantedBy=multi-user.target
/root/test.sh
#!/bin/sh
echo $ARG1
echo $ARG2
/root/test.conf 
ARG1="arg1"
ARG2="arg2"
systemctl status rootnode
● rootnode.service - test
   Loaded: loaded (/lib/systemd/system/rootnode.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

wrz 22 21:53:30 localhost systemd[1]: Started test.
wrz 22 21:53:30 localhost test.sh[31673]: arg1
wrz 22 21:53:30 localhost test.sh[31673]: arg2

 

 

 

 

edit: biorąc pod uwagę Twój przykład to wyglądałoby to tak:

/lib/systemd/system/rootnode.service
[Unit]
Description=test

[Service]
EnvironmentFile=/root/test.conf
ExecStart=/usr/local/bin/program $ARG1

[Install]
WantedBy=multi-user.target

 

/root/test.conf 
ARG1="85"

Nie wiem tylko czy jest używać do tego systemd, nie znam się na tym na tyle, żeby coś więcej poradzić. Może to będzie jakaś wskazówka.

 

Jeśli ma to być uruchamiane z phpa, to trochę lipa, systemctl'a z phpa? 

 

Edytowane przez SomeGuy
Odnośnik do komentarza
Udostępnij na innych stronach

@Suspect niestety nie działa.

PHP-FPM działa jako użytkownik: website_php, użytkownik, na którym ma się uruchomić program: user_program, skrypt:

<?php
system('sudo -u user_program /usr/local/bin/program > /dev/null 2>&1');

Co prawda program uruchamia się na użytkowniku user_program, jednak po restarcie php-fpm jest on nadal wyłączany.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z forum, wyrażasz zgodę na: Warunki użytkowania, Regulamin, Polityka prywatności.