status(){
(ps aux | grep jboss/bin/run.sh | sed s/"grep jboss\/bin\/run.sh"/"-"/|
grep jboss/bin/run.sh \> /dev/null) && (echo "There is an active jboss process";exit 0)||(echo "Jboss is not running";exit 1)
}
[...]
case "$1" in
start)
start
;;
status)
status
;;
[...]
exit 0
Moin, hab Suse Linux mit Jboss server.
Um ihn wie Apache auch mit /etc/init.d/jboss start zu starten, hab ich ein kleines SHELL-Scribt geschrieben.
Um zu vermeiden, dass er zweimal gestartet wird. Sollte „jboss start“ „jboss status“ ausführen und nur bei einem Fehlercode starten:
/etc/init.d/jboss status \>/dev/null && (echo "Jboss is already running"; exit 2) ||(/opt/jboss/bin/run.sh&:wink:
(Also nur Starten, wenn Jboss nit läuft.)
Aber irgendwie wird exit 1 nicht ausgeführt.
Kann das sein, das das in funktionen nicht möglich ist?
Hab nämlich auch das probiert: ./jboss status && echo ja || echo nein
Es kam immer „ja“ als antwort, egal ob das ding lief oder nit.
Oder wäres sinnvoller das mit Perl/Phyton/Ruby zu realisieren.
(Kenne keine der Sprachen, aber Perl scheint mir PHP ziemlich ählich zu sein)
Gruß Thomas
Hi Thomas,
status(){
(ps aux | grep jboss/bin/run.sh | sed s/„grep
jboss/bin/run.sh“/"-"/|
grep jboss/bin/run.sh > /dev/null) && (echo „There
is an active jboss process“;exit 0)||(echo „Jboss is not
running“;exit 1)
}
[…]
case „$1“ in
start)
start
;;
status)
status
;;
[…]
exit 0
das Problem dürften die runden Klammern sein. Sie sorgen dafür, dass die Befehle in einer eigenen Subshell gestartet werden (und ob die Subshell 1 zurückgibt, testest du ja nicht…)
Vielleicht so (ungetestet):
status()
{
ps aux | grep jboss/bin/run.sh | grep -v 'grep' \
\> /dev/null &&
(
echo "There is an active jboss process"
exit 0
) ||
(
echo "Jboss is not running"
exit 1
)
exit $?
}
Evtl. habe ich die Zeilenumbrüche vermurkst, aber vom Prizip her sollte es das sein. Oder sonst eben doch mit if … then … else … fi (auch wenn das mit && und || cooler aussieht 
gruss
bernhard
> status(){
> (ps aux | grep jboss/bin/run.sh | sed s/"grep jboss\/bin\/run.sh"/"-"/|
> grep jboss/bin/run.sh \> /dev/null) && (echo "There is an active jboss process";exit 0)||(echo "Jboss is not running";exit 1)
> }
Umpf! So sehr ich sonst fuer obfuscation bin… aber Du hast da wohl den Ueberblick verloren. Wie mein Vorredner schon so recht bemerkte beendet das erste exit 0 die subshell immer „erfolgreich“, die zweite subshell wird daher nie erreicht. Vielleicht fuer den Anfang doch einfacher[1] (sinngemaess):
status()
{
if pgrep jboss
then
echo "laeuft"
exit 0
else
echo "laeuft net"
exit 1
fi
}
> [...]
> case "$1" in
> start)
> start
> ;;
> status)
> status
Das wuerde auch glatt in diese Zeile passen.
> ;;
> [...]
> exit 0
hab Suse Linux mit Jboss server.
Was immer das sein mag.
Um ihn wie Apache auch mit /etc/init.d/jboss start zu
starten, hab ich ein kleines SHELL-Scribt geschrieben.
Bringt der kein eigenes SysV-Script mit?
Der elegante Weg waere uebrigens, sich die PID vom server zu merken / irgendwohin schreiben zu lassen und diese mit kill -0 $PID auf Existenz zu pruefen. (Wer mir sagt, wie ich rauskriege, ob hinter einer PID auch tatsaechlich das vermeintliche Programm steckt, kriegt ein Bienchen.)
HTH,
Gruss vom Frank.
[1] Wenn es komplizierter sein soll lassen sich nach Belieben cat, uudecode, md5sum, etc. einbauen.
Hi Thomas,
status(){
(ps aux | grep jboss/bin/run.sh | sed s/"grep
Mit:
ps -opid=, -C run.sh
sparst Du Dir das ganze rumgegreppe.
Allerdings ist run.sh natürlich ein Name, der zu Verwechslungen einlädt.