如果我使用
timeout 10 ssh -n -o BatchMode=yes 1.1.1.1 'sleep 20' > 1.1.1.1.txt 2>&1 &
要在服务器上发出远程命令,我在 10 秒后终止 SSH 连接,然后我可以看到sleep 20
该服务器仍在运行,但没有 SSH 连接。
如何在超时(例如 10 秒)后终止远程命令?
远程计算机是 AIX 6.1(或 SLES),并且没有可用于“超时”的软件包。我的客户端是Ubuntu 10.03。
答案1
假设您的远程服务器有一个兼容 POSIX 的 shell,则以下内容应该可以工作:
ssh ...options... 'command & pid=$!; sleep 20; kill $pid'
确实是POSIX标准说明$!
:
扩展为从当前 shell 执行的最近后台命令(请参阅列表)的十进制进程 ID。 (例如,从子shell执行的后台命令不会影响当前shell环境中“$!”的值。)对于管道,进程ID是管道中最后一个命令的进程ID。
如果远程系统有作业控制,您可以这样缩短它:
ssh ...options... 'command & sleep 20; kill %1'
答案2
如果您仍想仅使用“超时”命令来执行此操作,则您的远程执行命令(ssh)应该分配一个 tty,然后超时甚至会终止远程调用。将 ssh 命令更改为包含“-t”。