Automatické spuštění skriptu při bootu

debian

Automatické spuštění skriptu při bootu
« kdy: 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?
« Poslední změna: 29. 01. 2018, 12:39:55 od Petr Krčmář »


Re:Automaticke spustenie scriptu pri starte PC
« Odpověď #1 kdy: 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. Nebo krátký příklad zde: 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.

proKurve

Re:Automaticke spustenie scriptu pri starte PC
« Odpověď #2 kdy: 29. 01. 2018, 12:12:38 »
/etc/rc.local

debian

Re:Automatické spuštění skriptu při bootu
« Odpověď #3 kdy: 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?

ja

Re:Automatické spuštění skriptu při bootu
« Odpověď #4 kdy: 29. 01. 2018, 16:23:29 »
Proc tak slozite?
man crontab --> @reboot    :    Run once after reboot.

@reboot    /patho/to/script



Re:Automatické spuštění skriptu při bootu
« Odpověď #5 kdy: 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 ?

tnr

Re:Automatické spuštění skriptu při bootu
« Odpověď #6 kdy: 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 :-)

Re:Automatické spuštění skriptu při bootu
« Odpověď #7 kdy: 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.

okin

Re:Automatické spuštění skriptu při bootu
« Odpověď #8 kdy: 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.
 

tnr

Re:Automatické spuštění skriptu při bootu
« Odpověď #9 kdy: 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 :-)

ja

Re:Automatické spuštění skriptu při bootu
« Odpověď #10 kdy: 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.

debian

Re:Automatické spuštění skriptu při bootu
« Odpověď #11 kdy: 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...

Re:Automatické spuštění skriptu při bootu
« Odpověď #12 kdy: 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.