编写一个在后台运行的bash文件并检查连接?

时间:2016-09-15 06:54:15

标签: raspberry-pi raspbian remote-desktop

我必须解决我公司的一个问题,即我们使用基于Raspberry(基于unix)的Raspberry Pi机器远程连接到Windows 7机器并从那里开始工作。问题是,所有易于使用,免费,基于unix的rdesktop应用程序都无法处理断开连接。他们冻结了,“不那么有才华”的员工不知道如何阻止rdesktop并重新连接。

我需要写一些东西,最好是一个bash应用程序,它可以在Raspberry的后台运行并检查连接。如果连接断开,它应该杀死rdesktop并在连接恢复时启动一个新的连接。我不知道从哪里开始,因为虽然我找到了一些例子,但他们都使用ping来检查连接,但是我的老板说所有Raspberries一直发送ping数据包会使我们的网关超载。有没有办法在没有ping的情况下检查连接?

1 个答案:

答案 0 :(得分:0)

解决问题的一种方法是创建一个守护进程,该守护进程不断检查与主机的连接。

这样做涉及创建两个文件

  • ping主机/usr/local/bin/checkconnection.sh
  • 的脚本
  • 守护程序文件/etc/init.d/checkconnectiond

创建守护程序文件:
$ sudo touch /etc/init.d/checkconnectiond $ sudo nano /etc/init.d/checkconnectiond

并粘贴以下内容:

# !/bin/sh
# /etc/init.d/checkconnectiond

### BEGIN INIT INFO
# Provides:             checkconnectiond
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Script for checking connection for remote desktop
# Description:          Script for checking connection for remote desktop
### END INIT INFO

case "$1" in
    start)
        while sleep 30; do (/usr/local/bin/checkconnection.sh &) ; done
        ;;
    stop)
        killall checkconnectiond -q
        ;;
    *)
      echo "Usage: /etc/init.d/checkconnectiond {start|stop}"
      exit 1
      ;;
esac

exit 0

创建脚本:

$ sudo nano /usr/local/bin/checkconnection.sh

剧本:

if ping -c 1 host_ip &> /dev/null
then
  # do nothing, host is up
else
  killall remotedesktop-pid
fi

请务必更改host_ipremotedesktop-pid。您可以在使用killall时使用流程名称,因此,如果它被称为“rdp”,您可以killall rdp

现在我们有了一个守护进程,它会在启动覆盆子时自动启动。该守护进程每隔30秒运行checkconnection.shcheckconnection.sh脚本对主机运行ping命令。如果ping不成功,它将终止远程桌面进程,因此用户必须手动重新启动它。

来源: