2016-07-01 3 views
0

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/nullRaspberry 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.

Antwort

0

Wenn ich richtig verstehe: In einigen Umgebungen der Cron PATH ist nicht festgelegt, also Aufruf von pi in Ihrer Crontab führt zu der Fehlermeldung, die Sie erhalten.

Versuchen Sie, Ihren Skriptaufruf vollständig mit einem absoluten Pfad zu qualifizieren, z. so:

*/5 * * * * /path/to/script/pi /usr/bin/bash /home/pi/myscript.sh >/dev/null 2>/dev/null