循环杀死铬并根据条件打开另一个铬

时间:2017-06-06 12:53:19

标签: bash while-loop raspberry-pi

我有以下3个脚本(也许我可以创建一个脚本,但我的想法是没有看到逻辑:))

这是第一个脚本(chkEvents.sh)。这将检查文件是否包含内容并相应地启动浏览器。他们还加载了一个后台循环,以查看内容是否发生了变化。

#!/bin/bash  

baseEvent=$(cat EVENTS.CSV)
if [ -z "$baseEvent" ]
then
        ./chkifnoEvents.sh &
        exec startx /usr/bin/chromium-browser --kiosk --app=http://10.0.1.91/digisign-portrait-v8-lite/noEvents.html
else
        ./chkifactEvents.sh &
        exec startx /usr/bin/chromium-browser --kiosk --app=http://10.0.1.91/digisign-portrait-v8-lite/index.html
fi

第二个脚本是后台检查(chkifnoEvents.sh)

#!/bin/bash
pkill chkifactEvents.sh
while :
do
  chkEvents=$(cat EVENTS.CSV)
  if [ -z "$chkEvents" ]
  then
    sleep 2
    echo no events still
  else
    echo events found killing chrome
    pkill chromium-browse
    sleep 3
    break
  fi
done
sleep 1
exec ./chkEvents.sh

第三个类似于第二个(chkifactEvents.sh)

#!/bin/bash
pkill chkifnoEvents.sh
while :
do
  chkEvents=$(cat EVENTS.CSV)
  if [ -z "$chkEvents" ];
  then
    echo Events File is Empty killing chrome
    pkill chromium-browse
    sleep 3
    break
  fi
done
sleep 1
exec ./chkEvents.sh

我期望发生的事情是,如果EVENTS.CSV文件为空,浏览器会被杀死。请注意,这是在没有桌面管理器的情况下启动的。但是,当内容更改时......它不会启动浏览器。我收到以下错误:

xinit: connection to X server lost
xinit: giving up
xinit: unable to connect to X server: connection refused
xinit: server error

请帮忙。目标是在文件为空时基于屏幕保持浏览器。

编辑:我忘了提到该脚本会启动chrome但是当它杀死它时,它无法重新启动新实例

编辑:我正在使用运行最新jessie lite的覆盆子pi。我没有桌面管理器,所有安装的都是chrome-browser和Xorg服务器。该脚本在VT1上运行,应该保留在那里。

解决方案:我无法相信修复问题有多简单。

start.sh:

#!/bin/bash
while true; do
./chkEvents.sh
done

chkEvents.sh

#!/bin/bash
killall chkif*
baseEvent=$(cat EVENTS.CSV)
if [ -z "$baseEvent" ]
then
    ./chkifnoEvents.sh &
    exec startx /usr/bin/chromium-browser --kiosk --app=http://10.0.1.91/digisign-portrait-v8-lite/
else
    ./chkifactEvents.sh &
    exec startx /usr/bin/chromium-browser --kiosk --app=http://10.0.1.91/digisign-portrait-v8-lite/
fi

chkifnoEvents.sh

#!/bin/bash
while :
do
  chkEvents=$(cat EVENTS.CSV)
  if [ -z "$chkEvents" ]
  then
    sleep 2
    echo no events still
  else
    pkill chromium-browse
    break
  fi
done

chkifactEvents.sh

#!/bin/bash
while :
do
  chkEvents=$(cat EVENTS.CSV)
  if [ -z "$chkEvents" ];
  then
      pkill chromium-browse
      break
  fi
done

有时你只需退后一步,不再考虑它。想一想为什么不将脚本保持在循环而不是进程中。然后杀了它。条件将得到满足。我认为最终问题在于后台进程启动脚本会带来UI。

0 个答案:

没有答案