尽管使用了“nohup”,命令仍然退出

尽管使用了“nohup”,命令仍然退出

我在这里做错了什么?

我登录到第一台服务器(使用 putty)并运行以下查询:

sh -c 'nohup mysqldump -hxxx -Pxxx -uxxx -pxxx --dump-slave --include-master-host-port --apply-slave-statements -f -q -A -E -R | mysql -hxxxx -Pxxxx -uxxxx -pxxxx' &

如果我查看这两个数据库,我可以看到 MySQLDump 正在第一个数据库上运行,并在第二个数据库上导入。

但是当我关闭 Putty 会话(或者超时)时,mysqldump 停止运行。我认为使用nohup应该让它保持运行?

由于运行大约需要 8 个小时,我不能坐在那里看着 Putty 8 个小时来阻止它超时。

答案1

由于您在没有 的情况下运行 shell ,因此当您关闭会话时,nohup它会收到信号,并将其发送到管道中的所有进程。SIGHUP由于第二个mysql命令再次在没有 的情况下运行nohup,因此它终止并发送到SIGPIPEnohup mysqldump后者又终止。

尝试

nohup sh -c 'mysqldump -hxxx -Pxxx -uxxx -pxxx --dump-slave --include-master-host-port --apply-slave-statements -f -q -A -E -R | mysql -hxxxx -Pxxxx -uxxxx -pxxxx' &

答案2

不知何故,我承认我自己并不完全确定它nohup没有保护正确的位。幸运的是,有一个解决方案 -在第一台服务器上的screen或会话内启动此进程。tmux然后您可以断开screen/tmux会话并关闭 PuTTY 窗口,MySQL 转储/导入仍将运行。

相关内容