【发布时间】:2017-11-27 18:45:21
【问题描述】:
我今天尝试使用nohup 命令执行rsync 命令,以便即使我关闭控制台,也可以将某些文件从虚拟机复制到另一个虚拟机。
那我说为什么不用rsync [parameters] <b>&</b> + disown %1
两者有什么区别?
【问题讨论】:
标签: linux bash shell rsync nohup
我今天尝试使用nohup 命令执行rsync 命令,以便即使我关闭控制台,也可以将某些文件从虚拟机复制到另一个虚拟机。
那我说为什么不用rsync [parameters] <b>&</b> + disown %1
两者有什么区别?
【问题讨论】:
标签: linux bash shell rsync nohup
disown 是更好的做法(内置在 shell 中,而不是依赖于外部工具),但它需要更多的工作:您需要自己重定向 stdin、stdout 和 stderr(而nohup 会做使用硬编码的nohup.out 名称重定向(如果您自己没有这样做)。
因此:
rsync "${args[@]}" </dev/null >logfile 2>&1 & disown -h "$!"
作为文体说明,如果您对 PID 的唯一用途是将其传递给 disown,我确实建议将 disown 与调用放在同一行, 如上所述:这确保了 $! 引用指向之前立即派生的后台进程,即使未来的更改添加更多代码,可能会在 rsync 启动后派生其他后台进程。 (另一方面,如果您想稍后引用 PID,您可以将变量赋值放在同一行:rsync ... & rsync_pid=$!,然后将disown -h "$rsync_pid" 放在单独的行上。
【讨论】: