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

Mysql 即使在后台启动,终端关闭时脚本也会中断,mysql,bash,nohup,Mysql,Bash,Nohup,因此,我使用典型的nohup语法启动下面的脚本: nohup ./script & 下面的日志输出的一部分是当我有一个临时Internet连接,并且我的终端窗口被锁定,迫使我手动关闭它们时显示的内容。问题解决后,我重新登录并从日志中看到以下输出: 日志输出:(来自results2.Log) 脚本内容: #!/bin/bash first=5759776 last=15759776 while [ $first -lt 73843165 ]; do mysql -u -p??

因此,我使用典型的nohup语法启动下面的脚本:

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

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

脚本内容:

#!/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
所以基本上有两个问题:

  • 为什么当我关闭终端时,它没有在后台运行
  • 我如何防止将来发生这种情况

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

    #!/bin/bash
    
    trap "echo 'trap recieved';" SIGHUP SIGINT SIGTERM
    
    first=5759776
    last=15759776
    ....
    

    一个进程可以接收信号来通知他们一些事件。您可以使用kill命令发送信号。其他进程也向进程发送信号,如父进程。用这个命令你可以捕捉到信号。如果你没有抓住他们,这个过程就会终止。唯一的信号是9,您无法捕捉到它,比如:kill-9processid

    你想对更新做什么?该问题中没有设置字段=xx,与查询语法无关。我只是缺少日志文本。你能分享一下这会做什么吗?@user3299633-我已经在我的答案中添加了它
    #!/bin/bash
    
    trap "echo 'trap recieved';" SIGHUP SIGINT SIGTERM
    
    first=5759776
    last=15759776
    ....