为什么当使用 nohup 进行管道传输时,tee 会停在中间?

为什么当使用 nohup 进行管道传输时,tee 会停在中间?

我正在运行一个脚本(在 Laravel 项目中),需要几个小时才能完成。nohup以防止它在我的 ssh 会话断开连接时退出。

nohup php artisan do:thing 2>&1 | tee ~/tmp

它开始得很好,但一段时间后,我收到一个损坏的管道错误,它停止输出内容,并且tee也停止 - 文档在那时停止。

我猜这是因为tee进程被 ssh 会话丢弃杀死了?我可以阻止它吗?

我可以否认 tee 进程并阻止 ssh 终止它吗?

答案1

适用nohup于第一个命令。当您关闭 shell 时,tee不再可以写入其正常输出(标准输出)并退出。这会导致第一个命令退出,因为它现在也无法再写入其管道输出。

尝试这个

nohup php artisan do:thing >~/tmp 2>&1

或者如果你有screen

screen sh -c 'php artisan do:thing 2>&1 | tee ~/tmp'

相关内容