即使在后台启动终端关闭时脚本中断

时间:2016-06-12 19:58:17

标签: mysql bash nohup

所以我使用典型的nohup语法启动下面的脚本:

nohup ./script &

下面的日志输出的一部分是当我有临时Internet连接并且终端窗口锁定时显示的内容,强制我手动关闭它们。当我的问题解决后,我重新登录并从日志中看到此输出:

日志输出:(来自results2.log)

--------------
UPDATE table where id between 45759776 and 55759776
--------------

Terminal close -- sending "KILL QUERY 3329619" to server ...
Terminal close -- query aborted.
Bye
--------------

脚本分组:

#!/bin/bash

first=5759776
last=15759776

while [ $first -lt 73843165 ]; do
    mysql -u -p??????? db -vvv -e "UPDATE table where pc.id between $first and $last;" >> results2.log
    ((first=first+10000000))
    ((last=last+10000000))
done

所以基本上有两个问题:

  1. 当我关闭终端时为什么不在后台运行?
  2. 如何防止将来发生这种情况?

1 个答案:

答案 0 :(得分:1)

在脚本中添加陷阱处理程序以捕获如下信号:

#!/bin/bash

trap "echo 'trap recieved';" SIGHUP SIGINT SIGTERM

first=5759776
last=15759776
....

进程可以接收信号以通知他们某些事件。您可以使用 kill 命令发送信号。其他进程也像父进程一样向进程发送信号。使用此命令可以捕获信号。如果你没有抓住他们,这个过程将会终止。唯一的信号是9,你不能抓住:kill -9 processid;