Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: 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.
-
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
-
ukaz nam prosim ten skript celej ...
-
#!/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
-
#!/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
-
Zkopírovala jsem to z jiného skriptu a dosadila vlastní údaje.
-
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ě.
-
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.
-
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
-
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é.
-
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
-
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
-
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 ?
-
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ě ?
-
Už jsem na to přišla, přesměrovala jsem si do >/dev/null ty výpisy.
-
Přesměruj si výstup někam do logu a odpoj proces od aktuálního terminálu
prikaz > /var/log/core-mono.log 2>&1 &
EDIT: Aha, pozde :)
-
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í ?
-
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?
-
Osobne bych to rozdelil na dva radky a vyhnul se zpetnejm apostrofum:
psgrepawk=$(ps -ef | grep RTKernel.exe | grep -v grep | awk '{print $2}')
sudo echo "PID=$psgrepawk" >> "$SVC_DIR/$SVC_NAME"
-
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.