Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: JanaV 08 Dubna 2016, 16:19:05

Název: Služby pod init.d
Přispěvatel: JanaV 08 Dubna 2016, 16:19:05
Ahoj,

snažim se vytvořit linuxovou službu pod init.d/ , ale mám nějaký problém se syntaxí. Pomocí jednoho příkazu co jsem našla v jedné diskuzi jsem ji otestovala, a nelíbí se tomu následující řádky, které jsem zkopírovala z jiných služeb, a u nich to nepředstavuje žádný problém, ale u mě to nefunguje. Dokonce když jsem ji tam měla nakopírovanou, tak to zablokovalo mountování disků.

# Default-Start:     2 3 4 5
# Default-Stop:     

Netušíte jestli to nevyžaduje té službě přidělit nějaké právo aby fungovala ?

Díky

Jana V.
Název: Re:Služby pod init.d
Přispěvatel: jmp 08 Dubna 2016, 16:56:59
ono je více způsobů, jak zacházat se službama na linuxu (init systému)

dříve se používal system V (mrkněte na man update-rc.d - snad by to ještě mělo fungovat)

pak se v ubuntu objevil upstart (o ovládání/nastavování nevím nic)

jinde se prosazuje systemd
Název: Re:Služby pod init.d
Přispěvatel: ntz_reloaded 08 Dubna 2016, 17:18:03
ukaz nam prosim ten skript celej ...
Název: Re:Služby pod init.d
Přispěvatel: JanaV 11 Dubna 2016, 09:45:40
#!/bin/sh
### BEGIN INIT INFO
# Provides:          core-mono
# Required-Start:   
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:     
# Description:       Kernel Cluster
### END INIT INFO

mono /home/jana/Plocha/core-mono/RTKernel.exe
Název: Re:Služby pod init.d
Přispěvatel: ntz_reloaded 11 Dubna 2016, 11:07:29
#!/bin/sh
### BEGIN INIT INFO
# Provides:          core-mono
# Required-Start:   
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:     
# Description:       Kernel Cluster
### END INIT INFO

mono /home/jana/Plocha/core-mono/RTKernel.exe

to je opravdu parodie ... to nemuze fungovat ani teoreticky !!!!!

zeptam se (spis filosoficky):

1) vis co to je init skript ?
2) obtezovala jsi se podivat na jakykoliv jiny init skript (trebas pro inspiraci - zjevne ano, soude dle hlavicky) ?
3) V tom pripade se ptam (a neber si to osobne): jsi spise technicky antitalent na 101% a nebo jenom tedka predvadis az parodickou nekazen ?

Kdybych tam alespon videl pokus, tak se Ti budu snazit poradit dle sveho nejlepsiho vedomi a svedomi, ale nevidim tam ani "naznak" snahy (a bohuzel tam ani nevidim ani naznak premysleni), takze Ti to vyresit opravdu nemuzu,  (ledaze bych bych komplet celej init skript pro Tebe vytvoril - a to se skutecne nechystam ...)

zdravim, ntz
Název: Re:Služby pod init.d
Přispěvatel: JanaV 11 Dubna 2016, 11:29:18
Zkopírovala jsem to z jiného skriptu a dosadila vlastní údaje.
Název: Re:Služby pod init.d
Přispěvatel: JanaV 14 Dubna 2016, 09:59:46
Objevila jsem na jednom webu, že se ta služba musí povolit, a pak se přestanou zobrazovat ty chyby s Default-Start a Default-Stop.

Při povolování pomocí "sudo update-rc.d core-mono defaults" si vyžádalo změnu Default-Stop na "0 1 6", bez toho mi to nechtělo povolit.

Po povolení se ale u mě zobrazujou stále stejné hlášky, jako původně.
Název: Re:Služby pod init.d
Přispěvatel: Jakub Vaněk 14 Dubna 2016, 16:51:03
Tam nejde o to, že by tam byla špatná hlavička, jde o to, že tam ani není bashovský switch/case, který by oddělil start od stopu.
Název: Re:Služby pod init.d
Přispěvatel: Jakub Vaněk 14 Dubna 2016, 17:10:49
Rychlý google:
http://www.cyberciti.biz/tips/linux-write-sys-v-init-script-to-start-stop-service.html
https://mobiarch.wordpress.com/2014/05/16/creating-an-init-script-in-ubuntu-14-04/
nebo přímo upstart: https://help.ubuntu.com/community/UbuntuBootupHowto
Název: Re:Služby pod init.d
Přispěvatel: JanaV 15 Dubna 2016, 09:20:35
Nalezla jsem někde jednoduchý funkční skript, a ten jsem naimplementovala do té mé služby, takže zbytek za hlavičkou už mám v pořádku. Ale po použití příkazu na testování

sudo insserv core-mono

mi to stále zobrazuje tyto hlášky, i když po povolení služby by se měly podle jednoho webu ztratit

insserv: Default-Start undefined, assuming empty start runlevel(s) for script `friendly-recovery'
insserv: Default-Stop  undefined, assuming empty stop  runlevel(s) for script `friendly-recovery'

Podle mě by zbytek toho skriptu na to neměl mít vliv, ale jak říkám, mám to opravené.
Název: Re:Služby pod init.d
Přispěvatel: JanaV 15 Dubna 2016, 10:00:11
Přikládám kompletní opravený skript

#!/bin/sh
### BEGIN INIT INFO
# Provides:          core-mono
# Required-Start:   
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Kernel Cluster
### END INIT INFO

# path to app - zatim nepouzito
# APP_PATH=/home/jana/Plocha/core-mono

# script name
NAME=core-mono

# app name
DESC=RTKernel

# user
#RUN_AS=root # pouzito v jine, nefunkci, konstrukci u parametru za prikazem
RUN_AS=sudo # pokus, v nove konstrukci na to zapomneli, je tam jen promenna

case "$1" in

  start)
        echo "Starting $DESC"
        $RUN_AS mono /home/jana/Plocha/core-mono/RTKernel.exe &
        ;;
  stop)
        echo "Stopping $DESC"
        PID=`ps -ef | grep RTKernel.exe | grep -v grep | awk '{print $2}'`
        kil -9 $PID
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        PID=`ps -ef | grep RTKernel.exe | grep -v grep | awk '{print $2}'`
        kill -9 $PID
        sleep 15
        $RUN_AS mono /home/jana/Plocha/core-mono/RTKernel.exe &
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
exit 0
Název: Re:Služby pod init.d
Přispěvatel: ntz_reloaded 15 Dubna 2016, 14:24:21
tohle uz vypada lip .... nicmene ta tvoje hlaska se zda byt o skriptu `friendly-recovery' a ne o tvem novem skriptu ... pokud je mezi init.d skripty nejaky jiny zlocinec, tak insserv to bude zminovat a pritom se to nemusi tykat aktualniho skriptu na kterem pracujes
Název: Re:Služby pod init.d
Přispěvatel: JanaV 18 Dubna 2016, 08:16:00
Před těma chybama je ještě tento řádek. Z toho jsem usoudila, že se to týká té mé služby.

The script you are attempting to invoke has been converted to an Upstart
job, but lsb-header is not supported for Upstart jobs.

Takže by mi ta moje služba měla fungovat ?
Název: Re:Služby pod init.d
Přispěvatel: JanaV 18 Dubna 2016, 09:49:11
Otestovala jsem tu muji službu a skutečně funguje. Akorát se trochu divně chová, než bych čekala.

Kyž ji odstartuju
    sudo sh core-mono start

tak začne vypisovat různé hlášení do okna, a pokud ji chci zastavit, tak musím otevřít nové terminálové okno.
    sudo sh core-mono stop

Nedá se to nastavit, aby ty výpisy ze služby nezobrazoval, a mohla použít -start -stop -restart v jednom okně ?
Název: Re:Služby pod init.d
Přispěvatel: JanaV 18 Dubna 2016, 10:02:57
Už jsem na to přišla, přesměrovala jsem si do >/dev/null  ty výpisy.
Název: Re:Služby pod init.d
Přispěvatel: Martin Šácha 18 Dubna 2016, 10:04:34
Přesměruj si výstup někam do logu a odpoj proces od aktuálního terminálu

Kód: [Vybrat]
prikaz > /var/log/core-mono.log 2>&1 &

EDIT: Aha, pozde  :)
Název: Re:Služby pod init.d
Přispěvatel: JanaV 18 Dubna 2016, 10:34:42
Akorát mám problém s automatickým spouštěním. Někde jsem četla, že by se to mělo nějak nastavit, aby to spouštěl po restartu, ale u mě to funguje samo bez nastavení. Ale u ostatních distribucí / PC to ale nemusí být pravidlem, a budu si to muset ověřit a připravit nějaký skript na zprovoznění ?
Název: Re:Služby pod init.d
Přispěvatel: JanaV 20 Dubna 2016, 09:20:20
Snažím se vytvořit instalátor, který automaticky vygeneruje tu mojí službu, ale hlásí mi to chybu u 2 podobných řádků

sudo sh -c 'echo "PID=`ps -ef | grep RTKernel.exe | grep -v grep | awk '{print $2}'`" >> '$SVC_DIR/$SVC_NAME''

chyba:
}`" >> /etc/init.d/core-mono: 1: }`" >> /etc/init.d/core-mono: Syntax error: EOF in backquote substitution

Na jednom webu to někomu hlásilo stejnou chybu u znaku  `  , ale jemu chyběl ten znak na konci, ale já to mám na konci i začátku, a stejně to chybuje. Překontrolovala jsem si uzavorkování, a vypadá v pořádku.

Netušíte, na čem by to mohlo ještě chybovat, a proč v té chybě vypisuje 2x >> , když já to tam mám pouze jednou?
Název: Re:Služby pod init.d
Přispěvatel: Martin Šácha 20 Dubna 2016, 09:43:25
Osobne bych to rozdelil na dva radky a vyhnul se zpetnejm apostrofum:

Kód: [Vybrat]
psgrepawk=$(ps -ef | grep RTKernel.exe | grep -v grep | awk '{print $2}')
sudo echo "PID=$psgrepawk" >> "$SVC_DIR/$SVC_NAME"
Název: Re:Služby pod init.d
Přispěvatel: JanaV 20 Dubna 2016, 11:12:59
Jenže já to potřebuju vyechovat včetně těch podivných apostrofů ` , protože v kódu služby to tam figuruje. Když použiju proměnnou, tak tam musím dát i ty apostrofy, a obávám se, že to pak bude vracet stejné chyby.