使用nohup &后台运行脚本仍遇'Terminal close -- query aborted'错误求助
问题分析与解决办法
核心原因:
mysql命令默认会尝试关联控制终端,哪怕你用nohup加&启动了脚本,脚本里的mysql进程可能还是没完全脱离终端依赖。终端关闭时,mysql进程收到断开信号,就会抛出'Terminal close -- query aborted'错误,不过因为你的脚本是循环结构,后续循环还能继续执行。解决步骤:
- 给mysql命令加参数强制脱离终端:用
--batch或--skip-interactive参数让mysql以非交互模式运行,不再依赖终端。修改后的命令如下:
或者mysql --batch schema_one < /storage/staging/$filenamemysql --skip-interactive schema_one < /storage/staging/$filename - 显式重定向脚本输出:虽然
nohup默认会把输出写到nohup.out,但显式指定日志文件能避免潜在的终端关联问题,启动命令改成:nohup sh loader_in_loop.sh > /path/to/your/logfile.log 2>&1 & - 排查脚本里其他交互操作:如果脚本里有
read之类需要交互的命令,也要改成非交互模式,避免它们绑定终端。
- 给mysql命令加参数强制脱离终端:用
验证方法:修改后可以用
ps -ef | grep mysql查看mysql进程的TTY列,如果显示?,说明已经脱离终端了。
内容的提问来源于stack exchange,提问作者santhosh
相关产品推荐
相关产品推荐

