• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Prüfen ob Programm läuft /Neustarten

A

Anonymous

Gast
Hi,
also rein von der logik her
Code:
#!/bin/sh
iam=`basename $0`
#####?????prog="/usr/local/bin/program" ###endweder statisch oder dynamisch !
if [ "$1" == "" ]
        then
        echo $iam program
        echo or
        echo $iam -stop
        exit
fi
if [ "$1" == "-stop" ]
        then
        #einlesen zu loeschender pids
        while read a
                do
                kill -9 $a
                #killall -9 $prog #was killst den hiermit ?
                #killall -9 $pname #detto#
                #kill -9 $testpid #auch seltsam#
        done < /tmp/.loeschpid
        rm -f /tmp/.loeschpid
        exit
fi
if [ "$2" != "-self" ]
        then
        $0 $1 -self&
        exit
fi
pname=`basename $1`
prozesstest=`/bin/ps -axef`
echo $$ > /tmp/.loeschpid
while :
        do
        sleep 5
        testpid=`echo $prozesstest | grep $pname | grep -v grep|awk '{print $1}'`
        if [ "$testpid" == "" ]
                then
                $1
                #########echo pid des gestarteten progs fuer stopfall wegshreiben#
                ps -ax| grep $pname|grep -v grep|awk '{print $1}' >> /tmp/.loeschpid
                echo $$ >> /tmp/.loeschpid
        fi
done
jetzt sollte alles was gestartet wurde wieder geloescht werden !
aber eigentlich würde ich wie gesagt davon abraten ein programm im hintergrund alle 5 sekunden etwas tun zu lassen das solch ein unterfangen leicht ein knieschuss werden kann #lol#

natuerlich ist alles was ich da schreib UNGETESTET ;-)
Mƒg ®êïñï
 
Danke für den Tip, ist ne feine Sache.
Nur wie kann ich das in dem o.a. Programm verwenden?

Ok, in o.a. Programm ein "touch" rein, da wird wenigstens schonmal die .loeschpid erzeugt, dafür wird ein anderer Fehler geworfen.

Code:
#!/bin/sh
iam=`basename $0`
prog="/usr/local/bin/program"
if [ "$1" == "" ]
        then
        echo $iam $prog
        echo or
        echo $iam -stop
        exit
fi
if [ "$1" == "-stop" ]
        then
        while read a
            do
                kill -9 $a
            done < /tmp/.loeschpid
            rm -f /tmp/.loeschpid
        exit
fi
if [ "$2" != "-self" ]
        then
        $0 $1 -self&
        exit
fi
pname=`basename $1`
prozesstest=`/bin/ps -A`
touch /tmp/.loeschpid
while :
        do
        sleep 5
        testpid=`echo $prozesstest | grep $pname | wc -l`
        if [ "$testpid" == 0 ]
                then

                $1
                ps -a | grep $pname|grep -v grep|awk '{print $1}' >> /tmp/.loeschpid
                echo $$ >> /tmp/.loeschpid
        fi
done
program -stop
/usr/local/bin/program: line 15: kill: (25046) - Kein passender Prozess gefunden

/tmp/.loeschpid ist leer, die PID`s werden nicht geschrieben.
Irgendwas haut mit dem grep in der Form nicht hin.

linux:/usr/local/bin # ps -a | grep $pname|grep -v grep|awk '{print $1}' >> /tmp/.loeschpid
Aufruf: grep [OPTION]... MUSTER [DATEI]...
»grep --help« gibt Ihnen mehr Informationen.
 
Wenn ich es so mach wird nur die erste PID geschrieben, die anderen nicht.

Code:
#!/bin/sh
iam=`basename $0`
prog='/usr/local/bin/program'
if [ "$1" == "" ]
        then
        echo $iam $prog
        echo or
        echo $iam -stop
        exit
fi
if [ "$1" == "-stop" ]
        then
        while read a
            do
                kill -9 $a
            done < /tmp/.loeschpid
            rm -f /tmp/.loeschpid
        exit
fi
if [ "$2" != "-self" ]
        then
        $0 $1 -self&
        exit
fi
pname=`basename $1`
prozesstest=`/bin/ps -A`
rm -f /tmp/.loeschpid
touch /tmp/.loeschpid
while :
        do
        sleep 5
        testpid=`echo $prozesstest | grep $pname | wc -l`
        if [ "$testpid" == 0 ]
                then
                $1
#                ps -ax | grep $pname|grep -v grep|awk '{print $1}' >> /tmp/.loeschpid
#                ps -ax | grep $prog|grep -v grep|awk '{print $1}' >> /tmp/.loeschpid
                pidofproc -k "$prog" >> /tmp/.loeschpid
                pidofproc -k "$pname" >> /tmp/.loeschpid
                echo $$ >> /tmp/.loeschpid
        fi
done
 
Wie wärs damit?

Code:
#!/bin/bash

rm -f /tmp/.loeschpid
iam=`basename $0`
prog='/usr/local/bin/program'

if [ "$1" == "" ]
        then
        echo $iam $prog
        echo or
        echo $iam -stop
        exit
fi

if [ "$1" == "-stop" ]
    then
        kill -9 `cat /var/run/runner/parent.pid`
        kill -2 `cat /var/run/runner/child.pid`
    exit
fi

if [ "$2" != "-self" ]
        then
        $0 $1 -self&
        exit
fi

mkdir -p /var/run/runner
echo $$ > /var/run/runner/parent.pid
    while true; do
        $1 &
        echo $! > /var/run/runner/child.pid
        wait $!
    done
 
Oben