Puncte:0

Cum se creează un fișier de unitate șablon systemd „start all” dintr-un script parvenit cu mai multe servicii?

drapel jp

Sunt în proces de migrare a tuturor scripturilor personalizate parvenite la systemd. Am întâlnit un script care utilizează mai multe servicii. Nu pot să-mi dau seama care este sintaxa potrivită pentru a gestiona acest lucru sau dacă trebuie doar să creez separat .serviciu fișiere unitare pentru fiecare. Este posibil acest lucru pentru șablon? The Documentația unității SystemD nu îmi oferă multe informații, cu excepția modului de a crea un fișier șablon (anexând @ la nume) și modul de utilizare %i pentru a semnifica o instanță.

Parvenitul original dealer-start-all.conf

jurnalul consolei
începe la dealer-start
scenariu
    declare -a dealers=("TimeZone" "Timeout" "Inquiry" "Refuz")

    pentru introduceți „${dealers[@]}”
    do
        if initctl list | grep „^ distribuitor ($tip)”
        atunci
            stop dealer type=$tip
        fi
        start dealer type=$tip
        echo "dealer$type a început"
    Terminat
scriptul final

Cealaltă parte a ei, dealer.conf, ar trebui să fie destul de tăiat și uscat prin folosire %i în ExecStart porție, cum ar fi:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php

jurnalul consolei

instanță $type

opriți pe dealer-stop

scenariu
        sudo -u root php -f /path/to/dealer$type.php
scriptul final

script post-oprire

dacă [ -z „$UPSTART_STOP_EVENTS” ]
    atunci
        echo "dealer$type s-a oprit la `date +"%F %T.%N"` Rulați 'initctl emit dealer-stop' apoi 'initctl emit dealer-start' pe `hostname` pentru a rula din nou." | mail -s „dealer$type Stopped” [email protected]
    altfel
        echo "dealer$type a fost oprit manual la `data +"%F %T"`."
fi
scriptul final

Pur și simplu nu înțeleg cum să traduc matricea din prima într-o versiune systemd? Ar trebui să le împart în fișiere de unitate individuale? Dacă da, atunci aceasta nu este o problemă și se poate face cu ușurință. Nu sunt sigur de sintaxă (dacă există) pentru a face ceea ce face primul.

Puncte:0
drapel cz

Șablonul de unitate systemd este un șablon. Nu vei pune matricea în ea.Mai degrabă o să faci instanția pentru fiecare caz pe care îl doriți, de exemplu:

systemctl enable dealer@TimeZone
systemctl enable dealer@Timeout
...

Unde %i care apare în șablon va fi înlocuit cu ceea ce ați specificat.

Tu la fel nu pot folosi %i în nume binar în ExecStart=. Trebuie să fie o cale care există și %i folosit în argumentele sale. De exemplu:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php
DevOpsSauce avatar
drapel jp
Mulțumesc. Am avut porțiunea /usr/bin/php, dar am uitat să o introduc în întrebarea mea. Voi încerca asta și voi reveni să accept.
DevOpsSauce avatar
drapel jp
Am încercat să activez unul cu `systemctl enable dealer@TimeZone` și am primit o eroare: „Fișierele unității nu au configurație de instalare (WantedBy, RequredBy, Also, Alias ​​settings în secțiunea [Install] și DefaultInstance pentru unitățile șablon).
Michael Hampton avatar
drapel cz
@IRGeekSauce Ei bine, aceasta este o problemă complet fără legătură.
DevOpsSauce avatar
drapel jp
S-a adăugat „[Install] WantedBy=multi-user.target” și nicio eroare la acel moment. Acum reveniți la sarcina inițială la îndemână.
DevOpsSauce avatar
drapel jp
Am pus asta să lucreze. Am adăugat un fișier `dealers.target` cu `Requires=dealer-names-here`. Încă nu sunt complet sigur de toate acestea, dar la asta, cel puțin, a răspuns printr-o întrebare inițială. Vă mulţumesc pentru ajutor.

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.