我必须解决我的公司的一个问题,那就是我们使用基于Raspbian(unix)的Raspberry Pi机器来远程连接到Windows7机器并在那里工作。问题是,所有易于使用的、免费的、基于unix的rdesktop应用程序都不能处理断开连接。他们僵住了,“不太有才华”的员工不知道如何停止rdesktop并重新连接。
我需要编写一些东西,最好是一个bash应用程序,它可以在Raspberry上的后台运行并检查连接。如果连接断开,它应该杀死rdesktop,并在连接恢复时启动一个新的rdesktop。我不知道从哪里开始,因为虽然我找到了一些例子,但他们都使用ping检查连接,但我的老板说,所有一直发送ping数据包的树莓都会使我们的网关超载。有没有一种不用ping就能检查连接的方法?
发布于 2016-09-16 20:50:20
解决这个问题的一种方法是创建一个守护进程,该守护进程不断地检查到主机的连接。
使用这种方法需要创建两个文件
pings主机/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_ip和remotedesktop-pid。您可以在使用killall时使用进程名,因此如果它名为"rdp“,则可以执行killall rdp
现在我们有了一个守护进程,它将在引导树莓时自动启动。这个守护进程每30秒运行一次checkconnection.sh。checkconnection.sh脚本对主机运行ping命令。如果ping不成功,它将杀死远程桌面进程,因此用户必须手动重新启动它。
资料来源:
之前我为覆盆子项目编写了守护进程脚本
https://stackoverflow.com/questions/39504730
复制相似问题