SSH如何设置才能允许非交互式命令正常结束?
时间: 2024-10-28 13:06:31 浏览: 19
在Linux上,SSH默认设置并不保证非交互式命令会在连接关闭后自动结束,特别是当使用`stdin` (标准输入) 或 `stdout` (标准输出) 连接时。为了确保SSH下的非交互式命令能正常结束,你可以采取以下几种策略:
1. **添加`nohup`前缀**:在发送Java命令行前,先加上`nohup`,这样即使SSH会话断开,命令依旧会继续执行并将输出保存到文件中。例如:
```
nohup java your_command &> output.log &
```
2. **配置`exit-on-logout`选项**:有些版本的SSH支持一个名为`exit-on-logout`的配置项,在`.bashrc`或其他shell初始化脚本中加入:
```bash
if [ "$SSH_TTY" ]; then
exit-on-logout
fi
```
然后重启SSH服务使其生效。
3. **使用`expect`或`pexpect`**:通过脚本自动化工具来管理命令执行和控制终端连接,它们可以在SSH会话结束后优雅地结束Java进程。
4. **调整SSH客户端设置**:对于SSH客户端,例如PuTTY,可以选择“Connection > Terminal”部分的“Send EOF on exit”,关闭SSH时发送一个退出信号给远程进程。
5. **设置超时**:在调用`WaitForExit`时,设定一个合理的超时时间,防止因网络延迟造成的阻塞。
记得在每个操作之后都检查进程是否已经成功结束,以及是否有相关的日志记录。
阅读全文