Indításkor PID feljegyzése

 ( dikki | 2004. augusztus 14., szombat - 9:58 )

Indításkor PID feljegyzése

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Szeretném azt megcsinálni, hogy a crontabba berakott x11vnc szerverem minden nap adott időpontban leellenőrizze, fut-e már vnx szerver, és ha nem, elindítsa. Nem egyből rohantam ide topicot nyitni, hupon már keresgéltem, de nem nagyon volt még szó ilyenről.

Addig jutottam, hogy a psybncnél van erre két file. A psybnc.pid -be kerül feljegyzésre a pid, és a psybncchk checkolja; tartalma:

[code:1:995c2c65cd]
#!/bin/sh
# This is the crontab script for psybnc.
#
# Please change the following path to your psybnc-directory.

PSYBNCPATH=/home/debian/psybnc

# the rest should be kept as is

if test -r $PSYBNCPATH/psybnc.pid; then
PSYPID=$(cat $PSYBNCPATH/psybnc.pid)
if $(kill -CHLD $PSYPID >/dev/null 2>&1)
then
exit 0
fi
fi
cd $PSYBNCPATH
./psybnc &>/dev/null
[/code:1:995c2c65cd]

Ami gondolom azt jelenti, hogy: ha létezik a pid-et tároló file, akkor a psypid változó egyenlő lesz ezzel; és ha fut ilyen process, akkor ne csináljon semmit, ha nem, akkor indítsa. (a kill -chld -es sorról nem tudom pontosan mi, de csak ez lehet).
Namost ebben átírhatnám a psybnc-t x11vnc-re, ahol előfordul, tehát

[code:1:995c2c65cd]
#!/bin/sh
# This is the crontab script for psybnc.
#
# Please change the following path to your x11vnc-directory.

X11VNCPATH=/usr/bin

# the rest should be kept as is

if test -r $X11VNCPATH/x11vnc.pid; then
X11VNCPID=$(cat $X11VNCPATH/x11vnc.pid)
if $(kill -CHLD $X11VNCPID >/dev/null 2>&1)
then
exit 0
fi
fi
cd $X11VNCPATH
./x11vnc &>/dev/null
[/code:1:995c2c65cd]

Nem tom hogy ez így mennyire gány? :D És, mi hozza létre a pid-et (vki #debian.hu -n mondta, hogy hozzak létre, ok...)

[quote:450b542965="dikki"]Szeretném azt megcsinálni, hogy a crontabba berakott x11vnc szerverem minden nap adott időpontban leellenőrizze, fut-e már vnx szerver, és ha nem, elindítsa.....feljegyzésre a pid, és a psybncchk checkolja;
...És, mi hozza létre a pid-et (vki #debian.hu -n mondta, hogy hozzak létre, ok...)[/quote:450b542965]

Hát ez nem valami szép...
IMHO ez kell neked: http://smarden.org/runit/

Huh... nem szívesen váltanék erre, ha elrontok vmit, soha nem hozom helyre. :oops:

[quote:5301462b62="dikki"]
Ami gondolom azt jelenti, hogy: ha létezik a pid-et tároló file, akkor a psypid változó egyenlő lesz ezzel; és ha fut ilyen process, akkor ne csináljon semmit, ha nem, akkor indítsa. (a kill -chld -es sorról nem tudom pontosan mi, de csak ez lehet).
Namost ebben átírhatnám a psybnc-t x11vnc-re, ahol előfordul, tehát

[code:1:5301462b62]
#!/bin/sh
# This is the crontab script for psybnc.
#
# Please change the following path to your x11vnc-directory.

X11VNCPATH=/usr/bin

# the rest should be kept as is

if test -r $X11VNCPATH/x11vnc.pid; then
X11VNCPID=$(cat $X11VNCPATH/x11vnc.pid)
if $(kill -CHLD $X11VNCPID >/dev/null 2>&1)
then
exit 0
fi
fi
cd $X11VNCPATH
./x11vnc &>/dev/null
[/code:1:5301462b62]

Nem tom hogy ez így mennyire gány? :D És, mi hozza létre a pid-et (vki #debian.hu -n mondta, hogy hozzak létre, ok...)[/quote:5301462b62]
Noss... Semmi gány, azt leszámítva, hogy a psybnc maga csinál pid fájlt, és teszi bele a saját pidjét.
Itt neked kell gondoskodni a pid fájl kezeléséről. Vagyis arról, hogy létrejöjjön, belekerüljön a process pidje, illetve a process leállása után, a pid fájl eltünjön.
Kis RTFM is hasznos néha. Pl. ez esetben a Bash PARAMETERS szekciója ír erről, a Special Parameters alatt. De akármelyik unix alapozókönyvben megtaláltad volna ezt az információt:
[quote:5301462b62="RTFM:Bash"]
! Expands to the process ID of the most recently executed background (asynchronous) command.
[/quote:5301462b62]
Vagyis a script végét vhogy így módosítanám:
[code:1:5301462b62]
cd $X11VNCPATH
./x11vnc &>/dev/null &
echo $! >$X11VNCPATH/x11vnc.pid
wait
[/code:1:5301462b62]
Mindamellett megjegyezném, hogy a pid file letörlését ez még nem oldja meg... És azt is, hogy ész nélkül vetted át a scriptet, mert ha fejben kifejted a megfelelő változókat, akkor meglátod, hogy a /usr/bin-ben próbálná neked létrehozni a pid fájlt, és oda mezei user nem fog írni.
De ezek az apró "kozmetix"-ek már legyen a te gondod :-)