将 bash 脚本链接到启动它的 sshd 连接,以便我们能够终止它并运行另一个命令

将 bash 脚本链接到启动它的 sshd 连接,以便我们能够终止它并运行另一个命令

我的问题是我们连接到服务器并运行脚本。这会生成 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 信号。如果没有太多通信,您可以设置一个后台作业,每秒(或根据您需要的频率)将一个字符(例如一个点)发送回启动计算机,这将触发或多或少的立即操作。

相关内容