我的问题是我们连接到服务器并运行脚本。这会生成 2 个 PID,1 个用于 sshd,1 个用于 bash。有时,连接行程和我们在脚本中创建的内容仍然存在。
我们正在尝试在远程端进行清理,这样,如果 sshd 连接中断,它会自动捕获信号并删除我们不想要的内容。我们正在服务器上捕获终止信号等,但我们似乎无法捕获 ssh 丢弃。
当 sshd 连接丢失时,继续没有意义,因为我们需要连接才能进行处理。
我们尝试运行 2 个脚本,一个连接到服务器,另一个执行操作。
启动器
#!/bin/bash
#confirm arguments sent to server [args]
echo "You provided the arguments:" "$@"
#create ssh connection to remote server [args]
ssh -t "$1" 'trap : INT; bash -s' < monitor.sh "$2"
trap dockertermlocal EXIT
dockertermlocal()
{
echo "Caught termination signal from local!"
send clean up to remote server
echo "stopped docker from local"
exit 1
}
#Confirmation
echo "ran to completion"
偏僻的
#Command passed to script
echo "You provided the arguments:" "$@"
# Run docker command
eval "$@"
echo "ran command"
coproc ssh "$1" 'command & read; kill $!'
答案1
我不确定其他信号,但如果有返回本地计算机的通信,您可以在那里捕获 PIPE 信号。当连接丢失时,管道将关闭,因此脚本将在尝试写入时获取 PIPE 信号。如果没有太多通信,您可以设置一个后台作业,每秒(或根据您需要的频率)将一个字符(例如一个点)发送回启动计算机,这将触发或多或少的立即操作。