Systemd service sa nespustí [vyřešeno]

Obecné dotazy nebo názory k distribuci Linux Mint
Umístěním dotazu do vhodně zvoleného fóra níže urychlíte jeho řešení.
Zpráva
Autor
hal_sk
Příspěvky: 114
Registrován: 25 kvě 2020, 17:50

Systemd service sa nespustí [vyřešeno]

#1 Příspěvek od hal_sk »

Ahoj,
Nedarí sa mi zariadiť to, aby sa môj skript spustil po reboote.
Môj pustito.service súbor vyzerá zhruba takto:

Kód: Vybrat vše

[Unit]
Description=Nazov sluzby

[Service]
ExecStart=/home/ja/Skripty/skript.sh

[Install]
WantedBy=multi-user.target
Skript skript.sh je prehnaný cez "chmod +x".
Príkaz "sudo systemctl daemon-reload" vykonaný
Príkaz "sudo systemctl enable pustito.service" vykonaný

Keď dám "sudo systemctl start pustito.service" tak sa skript spustí. Ale po reštarte sa ten skript nespustí.
Keď dám "sudo systemctl status pustito.service" tak chybová hláška obsahuje:
"Failed at step EXEC spawning /home/ja/Skripty/skript.sh: No such file or directory"
"Main process exited, code=exited, status=203/EXEC"
"Failed with result 'exit-code'."

V čom môže byť problém?
Naposledy upravil(a) hal_sk dne 17 zář 2021, 00:17, celkem upraveno 2 x.

alfisko
Příspěvky: 332
Registrován: 28 črc 2018, 08:48

Re: Systemd service sa nespustí

#2 Příspěvek od alfisko »

Ja som daval pre spustenie skriptu linku na ten skript do /etc/rc2d to je adresar v ktorom su skripty na spustanie sluzieb. Ta linka musi zacinat velkym S a cislom.

https://docs.oracle.com/cd/E19683-01/80 ... index.html

hal_sk
Příspěvky: 114
Registrován: 25 kvě 2020, 17:50

Re: Systemd service sa nespustí

#3 Příspěvek od hal_sk »

alfisko píše: 14 zář 2021, 20:31 Ja som daval pre spustenie skriptu linku na ten skript do /etc/rc2d...
Tomu nerozumiem. To som nikdy nepoužíval a vždy sa mi nakoniec podarilo službu rozbehnúť.
Už som mal so .service problémy v minulosti a vediem si k tomu denník. Toto mi mohlo robiť problémy v minulosti, ale všetko som preveril:
1) Skript má byť executable (chmod +x...)
2) Skript má začínať riadkom "#!/bin/bash"
3) Nezabudnúť vykonať príkaz "sudo systemctl daemon-reload" a "sudo systemctl enable nazov.service" pred spustením servisu
4) Skontrolovať status servisu po pokuse o jeho spustení cez "sudo systemctl status nazov.service" a pokúsiť sa zistiť problém s prípadných hlásení
5) Sú cesty ku skriptom v poriadku?
6) Skúsiť minimalistický template pre .service súbor:
---
[Unit]
Description=Nazov servisu
[Service]
ExecStart=/home/uzivatel/cesta-ku-skriptu
[Install]
WantedBy=multi-user.target
---
7) Vložiť skript ktorý má byť vykonaný do priečinku, ktorý je určený pre podobné skripty: "/usr/local/bin"


Musím odhaliť problém a denník doplniť o bod 8. Lebo mňa s týchto servisov raz porazí. Stále narazím na nejaký problém.

Teraz som stvoril úplne minimalistický prípad a nefunguje to:
Mam skript /usr/local/bin/test.sh

Kód: Vybrat vše

#!/bin/bash
echo $(date) >> /home/hal/Desktop/log
Mám servis /etc/systemd/system/test.service

Kód: Vybrat vše

[Unit]
Description=Test service

[Service]
ExecStart=/usr/local/bin/test.sh

[Install]
WantedBy=multi-user.target
Po zadaní príkazu:
sudo systemctl start test.service
...skript normálne zbehne.

Po zadaní príkazu:
sudo systemctl enable test.service
...sa vytvorí nejaký symlink:
Created symlink /etc/systemd/system/multi-user.target.wants/test.service → /etc/systemd/system/test.service.

Po reboote skript nezbehne a po zadaní príkazu:
sudo systemctl status test.service
...sa zobrazí hlásenie ktoré okrem iného obsahuje obsahuje:

Kód: Vybrat vše

/usr/local/bin/test.sh: line 2: /home/hal/Desktop/log: No such file or directory

alfisko
Příspěvky: 332
Registrován: 28 črc 2018, 08:48

Re: Systemd service sa nespustí

#4 Příspěvek od alfisko »

Z terminalu to ide lebo po prikaze das heslo. Ale pri starte sa musi ten skript spustit pod rootom. A to sa udeje pri jednotlivych urovniach spustania sluzieb a to je zadefinovane v adresaroch /etc/rc*d.

hal_sk
Příspěvky: 114
Registrován: 25 kvě 2020, 17:50

Re: Systemd service sa nespustí

#5 Příspěvek od hal_sk »

alfisko píše: 14 zář 2021, 20:31 Ja som daval pre spustenie skriptu linku na ten skript do /etc/rc2d
alfisko píše: 15 zář 2021, 07:56 Z terminalu to ide lebo po prikaze das heslo. Ale pri starte sa musi ten skript spustit pod rootom. A to sa udeje pri jednotlivych urovniach spustania sluzieb a to je zadefinovane v adresaroch /etc/rc*d.
Ja mám v /etc tieto adresáre začínajúce na rc:
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rcS.d

A ako má vyzerať ten link na skript ktorý mám vložiť do rc2.d ?

West
Příspěvky: 323
Registrován: 20 kvě 2017, 11:02

Re: Systemd service sa nespustí

#6 Příspěvek od West »

Nutne to potrebuješ spúšťať ako službu?
Tiež by ma asi porazilo ak by som mal spúšťať všetky skripty, ktoré som doteraz napísal ako službu.

hal_sk
Příspěvky: 114
Registrován: 25 kvě 2020, 17:50

Re: Systemd service sa nespustí

#7 Příspěvek od hal_sk »

West píše: 15 zář 2021, 10:40 Nutne to potrebuješ spúšťať ako službu?
Tiež by ma asi porazilo ak by som mal spúšťať všetky skripty, ktoré som doteraz napísal ako službu.
Aký je ďalší spôsob? Napadá ma cron, ale to ide periodicky. Alebo potom je v Minte ešte GUI okienko "Startup Applications" a tam sa dajú zadávať príkazy, ktoré sa vykonajú po spustení PC. Len neviem, ako do toho rýpať cez terminál.
Aktuálne sa mi jedná o spustenie skriptu, ktorý mi pripojí VPN-ku po reboote Linuxu.

Edit:
Troška som pogooglil a asi ozaj existujú aj ďalšie spôsoby ako bežať skripty po reboote.
Aj tým cronom by sa to malo dať a aj tým spôsobom cez rc... ako prezentoval alfisko.
https://stackoverflow.com/questions/129 ... at-startup
Je to tak?
Ale aj tak nechápem tento trouble s mojim súčasným .service spôsobom.

alfisko
Příspěvky: 332
Registrován: 28 črc 2018, 08:48

Re: Systemd service sa nespustí

#8 Příspěvek od alfisko »

Ides na to asi moc zlozito. Ak je to skript, tak naklikaj spustenie pri starte cez grafiku.
linka sa robi :
ln -s "zdroj" "kde ma byt linka"

Kód: Vybrat vše

sudo bash
ln -s  /home/moj_skript   /etc/rc2d/Smojskript
To S znaci ze to je startovaci skript. Ak zacina na K to je kill - ukoncenie. V podstate je to systemove nastavenie linuxu. A preto je potrebna OPATRNOST, lebo ak nieco zmazes, je zle.
Ja som to pouzival v solarise bez grafiky - na servroch. Napriklad start sluzby dhcp. Ale v grafike to musis naklikat. Ked je to rootovsky skript, tak sa prihlas do grafiky ako root a naklikaj to.
Cronom asi nie, ten opakuje prikazy periodicky. To by musel v skripte pred spustenim overit ci dany proces bezi. Ak ano, tak nic nerob.

hal_sk
Příspěvky: 114
Registrován: 25 kvě 2020, 17:50

Re: Systemd service sa nespustí

#9 Příspěvek od hal_sk »

Ok, ďakujem. V priebehu týždňa sa na to pozriem.

West
Příspěvky: 323
Registrován: 20 kvě 2017, 11:02

Re: Systemd service sa nespustí

#10 Příspěvek od West »

Pre neperiodické spúšťanie skriptov je možné použiť:
- rc.local (skripty vyžadujúce root), alebo
- ~/.config/autostart (skripty spúšťané po zalogovaní sa do užívateľského účtu)

Spúšťanie cez rc.local sa pomaly opúšťa a nahrádza cez systemd, ale ešte stále existuje kompatibilita s rc.local. Po inštalácii systému môže byť potrebné povoliť rc.local. Normálne to je tuším vypnuté.

Spúšťanie ako služba je dobré vtedy ak je potrebné obsluhovať stavy: start, stop, restart (a závislosti na iných službách)
V prípade jednoduchého skriptu, ktorý sa má spusťiť iba raz po nábehu systému ako root je ten rc.local dosť výhodný.

Zamčeno