使用 SSH.NET 执行命令而不阻塞,并在关闭连接后保持运行

Posted

技术标签:

【中文标题】使用 SSH.NET 执行命令而不阻塞,并在关闭连接后保持运行【英文标题】:Execute command with SSH.NET without blocking and keep it running after closing the connection 【发布时间】:2021-08-11 19:26:37 【问题描述】:

我正在使用以下代码:

using (var client = new SshClient(host, user, pass))

    client.Connect();

    var terminal = client.RunCommand("/home/my-script.sh");

client.RunCommand 挂起,因为我正在使用的命令正在创建一个线程。我希望执行命令而不是等待线程完成。我该怎么点呢?

所以总结一下,我想:

发送创建后台工作(线程)的命令 在后台工作完成时,我应该能够关闭会话/连接以继续后台工作

参考:https://csharp.hotexamples.com/examples/Renci.SshNet/SshClient/RunCommand/php-sshclient-runcommand-method-examples.html

【问题讨论】:

【参考方案1】:

这不是真正的 SSH.NET 问题,而是一个通用的 SSH/shell 问题。

见How to make a program continue to run after log out from ssh?

所以应该这样做:

client.RunCommand("nohup /home/my-script.sh > foo.out 2> foo.err < /dev/null &");

【讨论】:

非常感谢。

以上是关于使用 SSH.NET 执行命令而不阻塞,并在关闭连接后保持运行的主要内容,如果未能解决你的问题,请参考以下文章

Android TV:通过 adb 关闭/打开显示而不丢失 wifi?

如何中断被某些套接字 IO 操作阻塞的线程而不关闭它

执行命令而不将其保留在历史记录中[关闭]

java 多次new DataOutputStream而不关闭,线程阻塞

有没有好的免费 .Net 网络库? (FTP、SFTP、SSH 等)[关闭]

使用 SSH.NET 库通过 SSH 连接到 MySQL