![rsync(还有其他命令)使用 nohup 运行会得到 sigterm](https://linux22.com/image/161521/rsync%EF%BC%88%E8%BF%98%E6%9C%89%E5%85%B6%E4%BB%96%E5%91%BD%E4%BB%A4%EF%BC%89%E4%BD%BF%E7%94%A8%20nohup%20%E8%BF%90%E8%A1%8C%E4%BC%9A%E5%BE%97%E5%88%B0%20sigterm.png)
我正在从我的计算机连接到 HP UX B.11.31 系统,并使用 nohup 运行一些非常冗长的命令,这样我就可以在它们完成的几天内睡觉并做其他事情。
此类命令的示例:
nohup rsync --rsync-path=/usr/local/bin/rsync -e ssh /data/src usr@target:/data/ >> /data/log/sync.out 2>&1 &
注意:Rsync 命令的目标是不同的 HP UX 服务器。
它会一直运行,直到我的计算机以某种方式与 HP UX 系统断开连接(它是通过我的家庭连接上的 VPN 通过 SSH 进行连接的,并且断开连接似乎每天都会发生一次)。
如果发生这种情况,我可以tail /data/log/sync.out
并且会发现:
Killed by signal 1.
rsync error: unexplained error (code 255) at rsync.c(549) [sender=3.0.8]
有人建议将该命令放入 shell 脚本中,然后使用 nohup 运行它。
所以我这样做了(使用 shebang for #!/usr/bin/bash
),然后将命令运行为nohup ./auto_rsync.sh > /data/log/sync.out 2>&1 &
。
同样的事情也发生了。
有趣的是,如果我只是在命令运行时通过键入 注销exit
,该命令将继续运行。那么为什么只有我的断开连接发送 SIGTERM 到使用 nohup 运行的进程呢?
答案1
我已经有一段时间没有在 HP/UX 上工作了,但是 ssh 应该仍然有一个 ServerAliveInterval 选项。因此,在命令中的 ssh 之后添加“-o ServerAliveInterval=60”。或者可以在 .ssh/config 中将此选项永久化或添加到系统 ssh 配置文件中。
编辑
它在 HP/UX 上的名称有所不同。我找到了一些文档。
https://support.hpe.com/hpsc/doc/public/display?docId=c01892997
在 /etc/opt/ssh/sshd_config 中指定的以下参数允许设置会话终止之前允许的所需不活动时间。
ClientAliveInterval 300
ClientAliveCountMax 6
上述代码将每五分钟(300 秒)发送一条客户端活动消息,最多尝试六次。客户端无响应 30 分钟后,客户端将断开连接。
ClientAliveInterval 默认值 0 确保默认情况下禁用此活动间隔。