这是我的第一个问题(在该论坛中)所以请耐心等待;;-)
对于这个问题:
我试图在一个几秒钟内偶然崩溃的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。
答案 0 :(得分:0)
如果我理解正确:在某些环境中,未设置cron PATH,因此在crontab中调用pi
会导致出现错误邮件。
尝试使用绝对路径完全限定脚本调用,例如:像这样:
*/5 * * * * /path/to/script/pi /usr/bin/bash /home/pi/myscript.sh >/dev/null 2>/dev/null