Fórum Root.cz

Hlavní témata => Distribuce => Téma založeno: debian 29. 01. 2018, 10:26:03

Název: Automatické spuštění skriptu při bootu
Přispěvatel: debian 29. 01. 2018, 10:26:03
Ahoj,

mam jednoduchy script o 2 riadkoch, typu chod do priecinku a spusti toto. Potreboval by som, aby sa tento script vykonal vzdy pri starte systemu. Docital som sa, ze script by mal byt ulozeniti v/etc/init.d/, nastavit mu prava execute a vytvorit symbolic link update-rc.d script.sh default.
Problem je, ze ked to spravim, nedostanem ziaden vypis v konzole a v logoch som tiez nic nenasiel.
Pouzivam debian 9.3.
Vie niekto poradit, ako na to? Aby sa spustil automaticky po starte PC?
Název: Re:Automaticke spustenie scriptu pri starte PC
Přispěvatel: Filip Jirsák 29. 01. 2018, 11:23:08
Debian 9 pokud vím používá systemd, to, co popisujete, by fungovalo s RC skripty a SysVinitem. Každopádně z takového skriptu nedostanete žádný výstup na konzolu, init skripty se spouští odpojené od konzole.

Popis, jak si v systemd vytvořit vlastní jednotku, najdete třeba zde: Writing unit files (https://wiki.archlinux.org/index.php/systemd#Writing_unit_files). Nebo krátký příklad zde: How to create a custom service that will autostart on boot on Archlinux? (https://superuser.com/questions/663989/how-to-create-a-custom-service-that-will-autostart-on-boot-on-archlinux) Obojí je shodou okolností pro ArchLinux, ale v Debianu to je stejné.

Výstup vašeho skriptu pak najdete v journalu (příkaz journalctl) – systemd tam přesměruje standardní výstup spouštěné aplikace.
Název: Re:Automaticke spustenie scriptu pri starte PC
Přispěvatel: proKurve 29. 01. 2018, 12:12:38
/etc/rc.local
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: debian 29. 01. 2018, 15:38:59
V /etc/systemd/system/script.sh

Kód: [Vybrat]
!/bin/sh
[Unit]
Description=container run

[Service]
Type=simple
ExecStart=/usr/bin/script.sh start  ##tu je napisany script
ExecStop=/usr/bin/script.sh stop

[Install]
WantedBy=multi-user.target

ked to zapnem, prikazom
Kód: [Vybrat]
systemctl enable script.sh dostanem
Error:
Kód: [Vybrat]
update-rc.d: error: script.sh Default-Start contains no runlevels, aborting.
Nejake rady, ako dalej?
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: ja 29. 01. 2018, 16:23:29
Proc tak slozite?
man crontab --> @reboot    :    Run once after reboot.

@reboot    /patho/to/script

Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: Ondra Satai Nekola 29. 01. 2018, 16:41:11
Proc tak slozite?
man crontab --> @reboot    :    Run once after reboot.

@reboot    /patho/to/script

protoze ti pak bude fungovat trebas  systemctl status script ?
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: tnr 29. 01. 2018, 16:54:54

Protoze to neni shell skript (takze tam nepatri #!/bin/sh), nema to tim padem koncit .sh, ale .service a v systemctl enable se koncovka nepouziva (systemctl enable/start sluzba).

Proc tak slozite?
man crontab --> @reboot    :    Run once after reboot.

@reboot    /patho/to/script

Proc to udelat standardne (aby bylo videt kdy se to spustilo, zda to jeste bezi, zda se to spustilo v poradku), kdyz to jde schovat do crontabu :-)
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: Filip Jirsák 29. 01. 2018, 17:06:16
Nejake rady, ako dalej?

Nevymýšlet si do unit file žádné !/bin/sh. To v žádném z těch návodů určitě nebylo. Stejně jako v těch návodech unit file neměly příponu .sh, protože to nejsou shellové skripty, ale měly příponu .service, protože jsou to jednotkové soubory popisující službu.
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: okin 29. 01. 2018, 19:50:01
@reboot sleep 60; screen -Sdm nejakynazev /patho/to/script.sh
Pak se mate moznost podivat co se deje zadanim: screen -r nejakynazev Zkontrolovat situaci a odejit pomoci CTRL A D
Nechejte si nejaky cas na spusteni tj v prikladu 60s protoze nektere sluzby kterych vyuziva Vas skript nemusi jeste bezet v dobe kdy se spusti @reboot v crontabu.
 
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: tnr 29. 01. 2018, 21:34:09
@reboot sleep 60; screen -Sdm nejakynazev /patho/to/script.sh
Pak se mate moznost podivat co se deje zadanim: screen -r nejakynazev Zkontrolovat situaci a odejit pomoci CTRL A D
Nechejte si nejaky cas na spusteni tj v prikladu 60s protoze nektere sluzby kterych vyuziva Vas skript nemusi jeste bezet v dobe kdy se spusti @reboot v crontabu.

sleep 60, tak to je robustnost startu na urovni :-) Proc to resit treba zavislostmi sluzby, at se to spusti v momente, kdy je to mozne, kdyz tam muzu strcit bulharskou konstantu s waitem :-)
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: ja 29. 01. 2018, 22:29:54
Jake zavislosti? Vubec nevime, co ten program dela. Zjevne je to nejaka nestandardni aplikace, kdyz nema zadny systemd/init skript, tak proc se snazit nacpat to do systemd? Kdyz si nekdo neporadi s takhle jednoduchou veci, tak snad neni nutne po nem hned vyzadovat konfiguraci systemd, kde najit pricinu proc nejaka aplikace nestartuje neni pro zacatecnika vubec jednoduche. Napsat jeden radek do cronu zvladne za minutu a ve screenu to pobezi stejne dobre jako z systemd.
Udelej to jak ti radil okin "@reboot sleep 60; screen -Sdm nejakynazev /patho/to/script.sh". Otoc server a uvidis, jestli program pobezi nebo ne. Takhle mi na serverech bezi nekolik Python/Perl skriptu, nektere uz mesice bez nejmensich problemu.
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: debian 30. 01. 2018, 09:51:02
Nejake rady, ako dalej?

Nevymýšlet si do unit file žádné !/bin/sh. To v žádném z těch návodů určitě nebylo. Stejně jako v těch návodech unit file neměly příponu .sh, protože to nejsou shellové skripty, ale měly příponu .service, protože jsou to jednotkové soubory popisující službu.

Docital som sa, ze script by mal mat
Citace
init script header
aj ked init je pre legacy soft... V kazdom pripade, ci tam ten init heder v tom scripte je alebo nie je, stale rovnaky stav...


Hej, hej, prepac.. zle som to napisal... Mal by som to mat tak, ako sa pise v navode, co si posielal.
V /usr/bin/script - tu mam napisany ten jednoduchy script...Este raz pripominam, ze je to uplne jednoduchy script - chod do priecinku a spusti toto, nic svetoborne... Pokail ho pustam manualne, tak funguje...
V /etc/systemd/system/script.service - tu mam ten unit file bez toho #!/bin/sh a *.sh ...  Ale stale to neviem zapnut, vzdy ked dam
Kód: [Vybrat]
systemctl enable script.service dostanem error
Kód: [Vybrat]
update-rc.d: error: script Default-Start contains no runlevels, aborting.
Docital som sa, ze script by mal mat init script header, pri tom init je pre lagecy soft, pokial zatial dobre chapem... No v kazom pripade, ci tam ten " init script header" je alebo nie je, je stav rovnaky...
Název: Re:Automatické spuštění skriptu při bootu
Přispěvatel: Filip Jirsák 30. 01. 2018, 12:05:37
Docital som sa, ze script by mal mat
Citace
init script header
Skript ano. Vy ale nevytváříte skript, nýbrž jednotkový soubor (unit file).

Kód: [Vybrat]
update-rc.d: error: script Default-Start contains no runlevels, aborting.
Tohle s tím vaším jednotkovým souborem pravděpodobně nijak nesouvisí. Nemáte zapomenuté něco v /etc/init.d?

Docital som sa, ze script by mal mat init script header, pri tom init je pre lagecy soft, pokial zatial dobre chapem... No v kazom pripade, ci tam ten " init script header" je alebo nie je, je stav rovnaky...
Ano, dříve se pro start služeb používaly shellové skripty, systemd to nahradil deklarativním popisem služby v jednotkových souborech. Debian má k systemd přidané nějaké vlastní udělátko update-rc.d, které se pokouší do systemd integrovat i staré skripty v /etc/init.d – a k té vaší chybě dochází tehdy, pokud v tom /etc/init.d je nějaký chybný skript.