Portál AbcLinuxu, 5. května 2025 15:10

Dotaz: Systemd spuštění více skriptů

16.9.2024 09:08 sanoch | skóre: 6
Systemd spuštění více skriptů
Přečteno: 542×
Odpovědět | Admin
Zdravím dámy a pánové.

Nedaří se mi spouštět více skriptů po startu systému. Zřejmě mám špatně zapsaný /etc/systemd/system/my-application.service. Prostě začínám a nerozumím dobře manuálu. Ještě je asi problém v tom, že jeden ze skriptů se musí spustit pod rootem.

Můžete mi prosím poradit jak na to? Předem děkuji. Zdraví Richard

Můj zápis:

[Unit] Description=My Application Auto Start After=network.target

[Service] ExecStart=/home/nas/skript 1 Restart=always User=nas Group=nas

[Service] ExecStart=/home/nas/skript 2 (tento potřebuje sudo) Restart=always User=root Group=root

[Install] WantedBy=multi-user.target
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.9.2024 11:48 Vtipnéř | skóre: 39 | blog: Vtipnéřův blog | Brno
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zdravím všechny.

Vlastní service pro systemd jsem nikdy nevytvářel, ale to vícenásobné použití "ExecStart" mi přijde podezřelé. Zkuste se mrknout na tenhle dotaz. A má tam být ta mezera za "/home/nas/skript"? Takhle se totiž pouští stejný skript s různými parametry.

Chybové hlášení by taky neškodilo.

Jirka
Opening Windows is better than washing them. Clearing Windows (e.g. erasing or deleting) is even much better.
16.9.2024 12:34 sanoch | skóre: 6
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
Děkuji za reakci.

Ne ta mezera je nedůslednost, dejme tomu "/home/nas/./skript1.sh"

Ten dotaz jsem našel, ale pořád nerozumím.

Nepotřebuji stejný skript s různými parametry. Potřebuji spustit dva různé skripty po spuštění systému, ideálně čekat až se dokončí první (ten lze spustit jen jako root) a pak spustit druhý. Ten druhý mi samostatně funguje jak má, jen jak připíšu ten první tak se to blokne.

my-application.service - My Application Auto Start Loaded: bad-setting (Reason: Unit my-application.service has a bad unit file setting.) Active: failed (Result: exit-code) since Mon 2024-09-16 12:26:27 CEST; 3min 41s ago Main PID: 2101 (code=exited, status=15) CPU: 34min 25.053s
Gréta avatar 16.9.2024 12:45 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů

pro vodlaďování mužeš zkusit zavolat přikaz systemd-analyze:

systemd-analyze verify my-application.service

noa z vypisu budeš asi víc moudřejší než z tohodlenc hlášení chybovýho :D ;D

Gréta avatar 16.9.2024 12:29 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
Odpovědět | | Sbalit | Link | Blokovat | Admin

to se mi ňák jakože nezdá že by v jedný unitě mohlo bejt víc [service] sekcí než jenom právě jedna :O :O

víc skriptů mužeš v 'ExecStart' pustit unitou jenom když má nastavenej 'Type' pouze na 'oneshot' hele. Pokud si typ nespecifikoval (a to si nespecifikoval) tak defaultní typ je 'simple'. Nicmeně ani todlecto by asi jako tvuj problém neřešilo.

Mohl by si využít 'execStartPre' nebo 'execStartPost' hele na spuštění před nebo po startu skriptu v 'ExecStart' pokud ti nevadí že voba skripty poběžej pod tim samým uživatelem. Pokud to va, nóó tak asi rozdělit do dvou unit a možná si jednu druhou vyžádat páč předpokládám že ten vobyčejnej skript je na tom rootovským zavislej :O ;D


to rootovskou pomenujem třeba sanochova.service a napišem do ni

[Unit]
Description=Sanochuv skript s rootem
After=network.target

[Service]
ExecStart=/home/nas/skript1
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target 

noa pak druhou nějakou službu, která už pod tim rootem nepoběží

[Unit]
Description=Sanochuv obycejnej skript
After=network.target sanochova.service
Requires=sanochova.service

[Service]
ExecStart=/home/nas/skript2
Restart=always
User=nas
Group=nas

[Install]
WantedBy=multi-user.target 

eště mě napadá možnost udělat tu service 'forking' a spustit jeden skript druhým ale to se prej v systemd nedoporučuje ikdyž to je prej uplně běžná linuxová praxe :D

Zelená energetická soustava založená na obnovitelnejch zdrojích energie versus realnej svět 🤡🇪🇸
16.9.2024 13:09 sanoch | skóre: 6
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
Ale kam to zapsat, pokud je zapíšu pod sebe do "/etc/systemd/system/my-application.service" tak to vyhodí

× my-application.service - My Application Auto Start Loaded: bad-setting (Reason: Unit my-application.service has a bad unit file se> Active: failed (Result: exit-code) since Mon 2024-09-16 12:26:27 CEST; 3min 41s> Main PID: 2101 (code=exited, status=15) CPU: 34min 25.053s

netuším jak se dostat k textu za odrážkou.

Nemá to být náhodou v samostatných adresářích?

např: "/etc/systemd/system/my-application.service1" "/etc/systemd/system/my-application.service2"
Gréta avatar 16.9.2024 14:10 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů

žádný složšky, normálně jenom jako *.service soubory ve '/etc/systemd/system'.

dej sem vystup tamtoho 'systemd-analyze verify', to by mělo víc podrobnějc vypsat jakou máš v tý unitě chybu :O :O

netuším jak se dostat k textu za odrážkou.

tim 'textem za odrážkou' myslíš co :O :O

16.9.2024 14:14 sanoch | skóre: 6
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
odrážka "> "

systemd-analyze verify nevyplivne nic

Asi by nevadilo spouštět to vše pod rootem.

Pokud to bude jednodušší.

Gréta avatar 16.9.2024 14:53 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
systemd-analyze verify nevyplivne nic

příde mi dost nepravděpodobný by to současně nadávalo na 'bad unit file' a současně systemd-analyze nic nevyplivlo :O :O zkontroluj pro jistotu jestli tim necháváš analyzovat správnej soubor :O :O

16.9.2024 20:29 tttttttttttt
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
Když výstup nebude na terminál, odrážka se nepoužije.
sudo systemctl status my-service.service | cat
Jde to i jinak (argumentem), tohle si líp pamatuju.
16.9.2024 14:54 sanoch | skóre: 6
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
sudo systemd-analyze verify my-application.service
Gréta avatar 16.9.2024 15:49 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů

zkus tu službu zastavit, udělat daemon-reload jestli si to už neudělal a znova zkusit spustit :O :O

....nejspíš to bere ten starej soubor *.service kterej ale už nevodpovídá současnýmu, dycky když se poeditujou už existujicí *.service soubory tak se pak musej znova načíst :O :O

sudo systemctl stop my-application.service
sudo systemctl daemon-reload
sudo systemctl start my-application.service
16.9.2024 17:21 sanoch | skóre: 6
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
To jsem samozřejmě udělal, ale verify mlčí a pořád to hlásí výše uvedenou chybu.

Nemá se to zapsat náhodou do:

/etc/systemd/system/skript1.service

a druhý

/etc/systemd/system/skript2.service

Takto jsem to pochopil z tvé poslední odpovědi.

Jinak moc díky za trpělivost s neználkem. Cesta k vědění je po padesátce již trnitá. Zbytky mozku již nejsou tak rychlé.

Budu moc vděčný, když mi pomůžeš toto vyřešit.

Richard

Gréta avatar 19.9.2024 00:25 Gréta | skóre: 37 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
Nemá se to zapsat náhodou do: /etc/systemd/system/skript1.service a druhý /etc/systemd/system/skript2.service

název toho *.service souboru se nemusí shodovat s názvem spouštěnýho skriptu, ten název si mužeš zvolit jakejkoliv

jinak mi asi jako rozumíš správně, v tý minulý odpovědi (hele) jsem to tak myslela - rozdělit do dvouch různejch *.service souborů :D ;D

16.9.2024 20:00 tttttttttttt
Rozbalit Rozbalit vše Re: Systemd spuštění více skriptů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Viz ExecStart= v dokumentaci.

Unless Type= is oneshot, exactly one command must be given. When Type=oneshot is used, zero or more commands may be specified.

A pak koukni na sekci Command lines.

Myslím, že chceš tohle:
[Unit] 
Description=My Application Auto Start 
After=network-online.target 

[Service] 
Type=oneshot
ExecStart=/home/nas/skript 1
ExecStartPost=!/home/nas/skript 2
Restart=always
User=nas
Group=nas 

[Install]
WantedBy=multi-user.target 
Type nastav podle toho, jestli je to služba nebo jednorázový skript.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.