在我的脚本中,我想执行一个连接到远程服务器的命令,由于网络连接不良,该命令可能需要很长时间。所以我希望它超时并在 60 秒后被终止。然而,有些情况下,它在第 59 秒才开始工作,并很快被终止,输出被截断(未完成的任务)。
我使用的是 GNU 超时,它只接受时间值,并在该时间过后终止进程。我期望的是一个仅在以下情况下超时并终止进程的工具:
- 时间流逝
- 该过程无任何输出。
有什么建议么?
答案1
在我看来,你可能想用不同的方法来解决这个问题。假设你通过 SSH 连接到远程服务器,你应该考虑以这样一种方式启动进程,即 SSH 连接可以正常挂断,进程继续执行。它最终看起来像这样:
nohup script.sh > /dev/null 2>&1 &
这将使用nohup
命令以不受挂断影响的方式执行script.sh
,将 STDIN/STDOUT 重定向到丢弃箱 (/dev/null),然后将进程置于后台。这将释放用于初始连接的 TTY,并允许进程在会话(和 TTY)关闭后继续在后台运行。