主程序 在主业务中或者循环中特定的地方循环写入 当前unix时间戳.到文件/var/log/znljx_dog.msg 中, 覆盖写入只保留一行.
守护程序则 循环读取 /var/log/znljx_dog.msg 文件中的时间戳. 每15秒读取一次. 如果发现 文件中的时间戳已经20秒未更新了, 那么就开启新窗口启动主程序.
#! /bin/sh
#开机的时候先暂停60秒, 等主程序正式启动之后再开始循环监控
sleep 60
while true
do
logtime=$(cat /var/log/znljx_dog.msg)
#let logtime1=${{logtime}}
let logtime1=$((logtime+1))
if(($logtime1 < 100000)); then
echo "error time ${logtime}..."
continue;
fi
let nowt=$(date +%s)
let ww=$nowt-$logtime1
echo $ww
if(($ww < 20)); then
echo "runing..."
else
echo "program is stop restart."
#bash ./start.sh & # 这里直接执行 , 会阻塞住住程序.
#pkill python
#下面的 qterminal 是 另外开一个窗口执行./start.sh,不同的linux系统, 可能qterminal 不同
qterminal -w "/home/firefly/Desktop/www/board_system" -e "sudo bash ./start.sh" &
fi
sleep 4
done
exit(0)