Skript jako démon v init.d

RandomGuy

Skript jako démon v init.d
« kdy: 23. 07. 2013, 16:47:57 »
Zdravíčko,

mám malou prosbičku, potřeboval bych poradit a zároveń zhodnotit, která z řešení mého problému bude "lepší".

Mám skript, který spouští nějaký program a zároveń ten skript loguje vše co se v programu odehrává a posílá pryč. Vše funguje fajn, když ten skript spustím přímo na serveru přes terminál. Avšak problém nastává v době, kdy se vzdáleně přihlásím přes putty a skript pustím. Po zavření terminálu spadne i samotný program.

Na google jsem našel cosi jako deamonize, start-stop-deamon či nohup. Popravě jsem nepochopil ani v jednom jak ze skriptu, který mám, udělat deamona tak, abych při ls -l /proc našel můj běžící skript. A popřípadě jej mohl přes init.d restartovat.

Rád bych, aby skript běžel pokaždé jako deamon v init.d po restartu serveru a byl vidět v procesech (/proc) pod svým názvem.
Systém: Linux 3.2.0-4-amd64 Debian Wheezy 7.1.0 core3.2.46-1 x86_64

Díky za rady.
« Poslední změna: 23. 07. 2013, 16:54:12 od Petr Krčmář »


D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Skript jako démon v init.d
« Odpověď #1 kdy: 23. 07. 2013, 18:24:06 »
Obavam se, ze Vas zklamu. Skript sam o sobe neni zadny proces, ale pouhy textovy soubor ktery se spousti tak, ze se da prezvejkat prislusnemu interpreteru. Az ten vytvori proces, ktery skript vykona, a ktery by i bylo mozne teoreticky demonizovat. Domnivam se vsak, ze pokud to interpreter nepodporuje, tak to pujde hezky ztuha (myslim ze Python a Gambas by to meli zvladat, ale jisty si tim vubec nejsem). Asi nejednodusi reseni bude ten skript prepsat do nejakeho jazyka, ktery tvori binarni spustitelne soubory (treba C).

Jinak predpokladam, ze ten skript z init.d ktery zminujete, sam demona netvori, ale slouzi pouze k rizeni jeho behu.

Co se tyce sposteni pres putty, neni to nahodou tim, ze system vetsinou ukoncuje vsechny procesy uzivatele, kdyz se odhlasi? Tedy i interpret vykonavajici nejaky skript...

jvb

Re:Skript jako démon v init.d
« Odpověď #2 kdy: 23. 07. 2013, 18:27:57 »
Nestačí ho prostě spouštět ve screenu?

Kit

Re:Skript jako démon v init.d
« Odpověď #3 kdy: 23. 07. 2013, 18:48:12 »
Rád bych, aby skript běžel pokaždé jako deamon v init.d po restartu serveru a byl vidět v procesech (/proc) pod svým názvem.
Podle mne bude nejjednodušší podívat se do některých skriptů v /etc/init.d/, udělat si podle nich svůj skript s podobnými vlastnostmi a umístit mezi ně. Ještě je nutné umístit symlink do vhodných /etc/rc3.d/, /etc/rc5.d/ apod.

RandomGuy

Re:Skript jako démon v init.d
« Odpověď #4 kdy: 23. 07. 2013, 20:04:41 »
Problém vyřešen. Děkuji za Vaše komentáře.
Jak říká D.A.Tiger asi to většina lidí řeší pomocí skriptu/programu v perl/C++/python. I na to jsem našel návody na netu, ale upřímně dost nerad kopíruji kód kterému nerozumím. Nejsem až tolik saturovaný v těchto jazycích.

Nakonec jsem to vyřešil tak, že využívám příkazu nohup.
Skript:
Kód: [Vybrat]
#! /bin/sh
FILE=log-$(date +%y%m%d-%H%M).txt
[b]nohup[/b] /var/cesta_k_programu/runscript.sh >> /var/cesta_k_programu/logs//$FILE [b]&[/b]
*tučně zvýrazněný text zajištuje, že při zavření terminálu se skript neukončí, pozor nezapomeňte i "&" jako já, jinak to nebude fungovat :-)

Dále jsem vytvořil symbolický link v /etc/init.d/ a použil příkaz:
Kód: [Vybrat]
update-rc.d -f nazev_skriptu defaults
Vše funguje.
Díky za spolupráci.



Re:Skript jako démon v init.d
« Odpověď #5 kdy: 25. 07. 2013, 11:21:37 »
Přitom úplně stačilo nacpat ten příkaz do rc.local, od toho tam taky je. Do init.d patří jen dospělé initskripty, tedy takové co umí kromě start také stop.