Crontab

Fórumok

Crontab

Hozzászólások

[quote:4923c47d14="algernon"][quote:4923c47d14="Beanie"]
Még azt nem tudom, hogy ez mit jelentjet jelen esetben:
./bopm.sh: cannot create : No such file or directory
Lehet ez a hiba, de hogy mire írja....

Waah.. Vak vagyok.

kill .. >/dev/null 2>$1

$! Nem $ az, hanem &!

2>$1 miatt sir, hogy cannot create, ergo negativ ertekkel ter vissza, ergo torli a pidfilet es megprobalja restartolni.

Ird at 2>&1 -re, es maris menni fog imho.

Oké, de mi a &1? Amúgy béna vagyok, ert az eredeti helyen &-el van csak elcsesztem. :) De anélkül is megy most.

[quote:d9990cacb8="Beanie"]Oké, de mi a &1? Amúgy béna vagyok, ert az eredeti helyen &-el van csak elcsesztem. :) De anélkül is megy most.

>&1 azt jelenti, hogy atiranyitas az 1-es filedescriptorra, ami >/dev/null miatt szepen eltunik a sullyesztoben.

En tovabbra is javasolnam, hogy `` nelkul legyen, es 2>&1 -el. Kulonben elofordulhat, hogy nem fogja ujrainditani a dolgot.

Peldaul:

[code:1:d9990cacb8]
if `kill -0 12345 >/dev/null`; then
echo foo
fi
[/code:1:d9990cacb8]

Ha van 12345 PID-u processzem, ez akkor foo -t ir, ahogy kell. De ha nincs, akkor is. Kovetkeztetes: ez mindig bele fog futni a kilepo agba.

Mig `` nelkul nem. a 2>&1 meg eltunteti a hibauzenetet.

S hogy miert tortenik ez? Mert if `blabla`; then ... ; fi akkor futtatja le a ... -t, ha a blabla kimenete standard outputra nem irt semmit. Nomarmost kill nem fog oda irni. Mert igy parameterezve vagy semmit nem ir sehova, vagy hibauzenetet stderr -re, amit nem ellenoriz az if.

[quote:d3f2cf973c="algernon"]>&1 azt jelenti, hogy atiranyitas az 1-es filedescriptorra, ami >/dev/null miatt szepen eltunik a sullyesztoben.

De a >/dev/null már eltüntette, nem? Akkor minek még a 2>&1 ?

[quote:978acd00fb="Beanie"][quote:978acd00fb="algernon"]>&1 azt jelenti, hogy atiranyitas az 1-es filedescriptorra, ami >/dev/null miatt szepen eltunik a sullyesztoben.

De a >/dev/null már eltüntette, nem? Akkor minek még a 2>&1 ?

2>&1 az stderrt iranyitja at oda, ahova stdin megy.

Probald ki ezt:

kill -0 NEMLETEZOPID >/dev/null

majd ezt:

kill -0 NEMLETEZOPID >/dev/null 2>&1

Magyarazat:
1 -es filedescriptor: stdout, ahova a normal uzenetek mennek
2 -es filedescriptor: stderr, ahova a hibauzenetek mennek

Ha a konzolon nem akarsz semmilyen uzenetet latni, es csak az exit code erdekel, akkor mindkettot /dev/null-ba szokas iranyitani.

Köszi az okosítást, így már értem :)

Hali,

valahol láttam egy példát crontab scriptre, hogy hogyan lehet ellenőrizni, hogy fut-e valami, pid alapájn, és így csináltam egy ilyet:

#!/bin/sh
PID_FILE="/usr/local/bopm/var/bopm.pid"
PID=`cat $PID_FILE`
EXECUTABLE="/usr/local/bopm/bin/bopm"

if test -r $PID_FILE ; then
# pidfile exist, is it correct?
if `kill -CHLD $PID >/dev/null 2>$1`; then
# ok, exit silently
exit 0
fi
rm -f $PID_FILE
fi
echo ""
echo "Couldn't find the IRC proxy scanner running, retsarting.."
echo ""
$EXECUTABLE

Ezzel az a baj, hogy ha már fut a progi, akkor is elindítja és több fut utána belőle, szóval az a része, hogy

if `kill -CHLD $PID >/dev/null 2>$1`; then
# ok, exit silently
exit 0
fi

valamiért nem jó. Nem tudjátok mi lehet vele gond? Vagy tudnátok írni egy példát, hogy Ti hogyan ellenőrzitek pid alapján, hogy fut-e valami?

[quote:f0dffc2ff6="Beanie"]
Ezzel az a baj, hogy ha már fut a progi, akkor is elindítja és több fut utána belőle, szóval az a része, hogy

if `kill -CHLD $PID >/dev/null 2>$1`; then
# ok, exit silently
exit 0
fi

valamiért nem jó. Nem tudjátok mi lehet vele gond? Vagy tudnátok írni egy példát, hogy Ti hogyan ellenőrzitek pid alapján, hogy fut-e valami?

Szerintem itt a `` nem kell. ``-vel ugyanis a kimenetet ellenorzod, nem pedig a visszateresi erteket. Mindenfele kimenetet pedig elkuldod /dev/null-ba, ergo soha nem lep bele abba az agba.

En az alabbi primitiv scriptet fabrikaltam a celra:

[code:1:27448fc5c0]#!/bin/sh
# List your pidfiles in this file
conf=/etc/process-check.conf
# Email address to mail the result
recipient=emailcim@valahol.hu
# From address (leave it blank to receive mails from root)
from=szerver@valahol.hu

check_process ()
{
ps --no-heading --pid `cat $1`
}

for i in $(cat $conf); do
pid=`echo $i | cut -d':' -f1`
command1=`echo $i | cut -d':' -f2`
command2=`echo $i | cut -d':' -f3`
if check_process $pid
then
continue
else
(printf "From: $from\nTo: $recipient\nSubject: Process checking $host re
port\n\n";
$command1 $command2 ) | /usr/lib/sendmail -t || {
echo $0 error 1>&2
exit 1
}
fi
[/code:1:27448fc5c0]

/etc/process-check.conf

[code:1:27448fc5c0]/var/run/syslog-ng.pid:/etc/init.d/syslog-ng:restart
/var/chroot/bind/var/run/named.pid:/etc/init.d/chroot-bind:restart[/code:1:27448fc5c0]

Sajnos `` nélkül is gyártja az új instance-eket. Köszi a scriptet, ezt majd kipróbálom, ha az én verziómat nem tudom megoldani.

[quote:1f97621eca="Beanie"]Sajnos `` nélkül is gyártja az új instance-eket. Köszi a scriptet, ezt majd kipróbálom, ha az én verziómat nem tudom megoldani.

Ha snmpd -t használsz, mondjuk mrtghez, akkor neki is megmondhatod, hogy figyelje a processt és mit csináljon ha nincs. Egeszen jol konfigolhato es sokmindenre hasznalhato.

[quote:d939154ed2="andrej_"][quote:d939154ed2="Beanie"]Sajnos `` nélkül is gyártja az új instance-eket. Köszi a scriptet, ezt majd kipróbálom, ha az én verziómat nem tudom megoldani.

Ha snmpd -t használsz, mondjuk mrtghez, akkor neki is megmondhatod, hogy figyelje a processt és mit csináljon ha nincs. Egeszen jol konfigolhato es sokmindenre hasznalhato.

Eddig nem volt snmp-re szükségem, de lehet felrakom megnézni.

[quote:1675ac58b6="Beanie"]Sajnos `` nélkül is gyártja az új instance-eket. Köszi a scriptet, ezt majd kipróbálom, ha az én verziómat nem tudom megoldani.

Probald ki, hogy -CHLD helyett -0, hatha. Meg egy lehetoseg, hogy a scriptet sh -x -el futtatod, es akkor latod hogy mikor mit csinal eppen. Az fenyt derithet dolgokra.

[quote:79b23281ef="algernon"][quote:79b23281ef="Beanie"]Sajnos `` nélkül is gyártja az új instance-eket. Köszi a scriptet, ezt majd kipróbálom, ha az én verziómat nem tudom megoldani.

Probald ki, hogy -CHLD helyett -0, hatha. Meg egy lehetoseg, hogy a scriptet sh -x -el futtatod, es akkor latod hogy mikor mit csinal eppen. Az fenyt derithet dolgokra.

Sajnos egyik sem megy. Látom a kiemenetet, de nem sokat segít. Ezt írja mindig kb, vagy ha CHLD-vel csinálom, akkor a 0 helyett azt:

root@server# su bopm -c "./bopm.sh"
+ PID_FILE=/usr/local/bopm/var/bopm.pid
+ cat /usr/local/bopm/var/bopm.pid
+ PID=10919
+ EXECUTABLE=/usr/local/bopm/bin/bopm
+ test -r /usr/local/bopm/var/bopm.pid
+ kill -0 10919
./bopm.sh: cannot create : No such file or directory
+ rm -f /usr/local/bopm/var/bopm.pid
+ echo

+ echo Couldn't find the IRC proxy scanner running, retsarting..
Couldn't find the IRC proxy scanner running, retsarting..
+ echo

+ /usr/local/bopm/bin/bopm

Még azt nem tudom, hogy ez mit jelentjet jelen esetben:
./bopm.sh: cannot create : No such file or directory
Lehet ez a hiba, de hogy mire írja....

Megvan!

2>$1 nem kell oda, a `` jeleket meghagytam, most tökéletes. :)
Ki tudja, h ahol láttam ezt a módszert (unrealircd-ben amúgy), ott mért volt, de nem kell.

[quote:6480e7e3a0="Beanie"]
Még azt nem tudom, hogy ez mit jelentjet jelen esetben:
./bopm.sh: cannot create : No such file or directory
Lehet ez a hiba, de hogy mire írja....

Waah.. Vak vagyok.

kill .. >/dev/null 2>$1

$! Nem $ az, hanem &!

2>$1 miatt sir, hogy cannot create, ergo negativ ertekkel ter vissza, ergo torli a pidfilet es megprobalja restartolni.

Ird at 2>&1 -re, es maris menni fog imho.