2016-06-12 399 views
1

所以我推出下面典型的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 
-------------- 

脚本Conents:

#!/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. 如何避免将来发生这种情况?
+0

你想要做什么更新?在 –

+0

中没有**设置字段= xx **问题不在于查询语法。我只是简化了日志文本。 – user3299633

回答

0

添加陷阱处理您的脚本来捕获的信号,如:

#!/bin/bash 

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

first=5759776 
last=15759776 
.... 

进程可以接收信号,告知他们在一些事件。你可以用命令发送信号,命令为。其他进程也像父进程一样向进程发送信号。用这个命令你可以捕捉到信号。如果你不抓住他们,这个过程将终止。唯一的信号是9,你不能捕捉像:kill -9 processid;

+0

你能分享一下这会做什么吗? – user3299633

+0

@ user3299633 - 我已将它添加到我的答案中 –