由cron调用的Raspberry Pi包装器脚本失败

时间:2016-07-01 14:48:24

标签: bash cron

这是我的第一个问题(在该论坛中)所以请耐心等待;;-) 对于这个问题: 我试图在一个几秒钟内偶然崩溃的raspi上运行一个二进制文件。由于二进制文件通常将其输出提供给stdout,我试图将它与屏幕一起使用并将其输出传递给文件。这样做,我写了一个小包装脚本,每五分钟由cron调用一次。我的想法是,如果输出文件在一段时间内没有变化,那么该进程将被终止并重新启动。 这是我的/ etc / crontab: */5 * * * * pi bash /home/pi/myscript.sh >/dev/null 2>/dev/null

以下是谜题:     #!/斌/庆典

# 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

以下是检查以下内容的脚本:     #!/斌/庆典

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

但显然最后一个脚本没有重新开始这个过程而且我从cron收到邮件:

From pi@raspberrypi Fri Jul 01 16:42:25 2016
Return-path: <pi@raspberrypi>
Envelope-to: pi@raspberrypi
Delivery-date: Fri, 01 Jul 2016 16:42:25 +0200 
Received: from pi by raspberrypi with local (Exim 4.84_2)
    (envelope-from <pi@raspberrypi>)
    id 1bIzeD-00007c-0A
    for pi@raspberrypi; Fri, 01 Jul 2016 16:42:25 +0200
From: root@raspberrypi (Cron Daemon)
To: pi@raspberrypi
Subject: Cron <pi@raspberrypi> 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: <E1bIzeD-00007c-0A@raspberrypi>
Date: Fri, 01 Jul 2016 16:42:25 +0200

/bin/sh: 1: pi: not found

我没有脚本startprocess.sh,我认为使用输出管道邮件会被抑制... 但主要的问题是:如果输出文件没有运行五分钟没有运行,为什么脚本应该重启进程? 干杯和问候,

JD。

1 个答案:

答案 0 :(得分:0)

如果我理解正确:在某些环境中,未设置cron PATH,因此在crontab中调用pi会导致出现错误邮件。

尝试使用绝对路径完全限定脚本调用,例如:像这样:

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