Dies ist meine erste Frage (in diesem Forum) also bitte etwas Geduld ... ;-) Zum Problem: Ich versuche, eine binäre auf einem raspi, die abstürzt zufällig in ein paar Stunden. Da die Binärdatei ihre Ausgabe normalerweise an stdout gibt, versuche ich, sie mit dem Bildschirm zu verwenden und ihre Ausgabe in eine Datei zu pipen. Ich habe ein kleines Wrapper-Skript geschrieben, das alle fünf Minuten von cron aufgerufen wird. Meine Idee war, dass, wenn sich die Ausgabedatei nicht über einen bestimmten Zeitraum ändert, der Prozess abgebrochen und neu gestartet wird. Hier ist meine/etc/crontab: */5 * * * * pi bash /home/pi/myscript.sh >/dev/null 2>/dev/null
Raspberry Pi Wrapper-Skript von Cron genannt fehlschlägt
Hier ist die myscript: #/bin/bash
# Input file
FILE=/home/pi/output.txt
# How many seconds before file is deemed "older"
OLDTIME=300
# Get current and file times
CURTIME=$(date +%s)
FILETIME=$(stat $FILE -c %Y)
TIMEDIFF=$(expr $CURTIME - $FILETIME)
# Check if file older
if [ $TIMEDIFF -gt $OLDTIME ]; then
#echo "File is older, do stuff here"
bash /home/pi/check_myscript_is_running.sh
fi
Hier ist das Skript, das überprüft: #/bin/bash
case "$(pidof processname | wc -w)" in
0) echo "Restarting process: $(date)" >> ~/output.txt
screen -dm /home/pi/binary -l output.txt &
;;
1) # all ok
;;
*) echo "Removed double process: $(date)" >> ~output.txt
kill $(pidof process | awk '{print $1}')
;;
esac
Aber offensichtlich das letzte Skript den Prozess nicht neu starten, und ich bin immer Mails vom cron:
From [email protected] Fri Jul 01 16:42:25 2016
Return-path: <[email protected]>
Envelope-to: [email protected]
Delivery-date: Fri, 01 Jul 2016 16:42:25 +0200
Received: from pi by raspberrypi with local (Exim 4.84_2)
(envelope-from <[email protected]>)
id 1bIzeD-00007c-0A
for [email protected]; Fri, 01 Jul 2016 16:42:25 +0200
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <[email protected]> pi /home/pi/startprocess.sh
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/pi>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=pi>
Message-Id: <E1bIze[email protected]>
Date: Fri, 01 Jul 2016 16:42:25 +0200
/bin/sh: 1: pi: not found
Ich habe kein Skript startprocess.sh und ich dachte, dass mit der Ausgangsleitung die Mails unterdrückt werden würden ... Aber die Hauptfrage ist: Warum ist das Skript, das den Prozess neu starten sollte, wenn die Ausgabe Datei hat sich nicht geändert für fünf Minuten nicht ausgeführt? Prost und Grüße,
JD.