我想在周末运行一个 shell 脚本,但我想确保如果终端失去连接,我的脚本不会被终止。我使用 nohup 来调用整个脚本,但我还想以某种方式执行我的 shell 脚本的某些部分,这样如果有人关闭了我的终端,我的脚本仍然在后台运行。这是一个简单的例子:
#!/bin/bash
echo "Start the trap"
trap " " HUP
echo "Sleeping for 60 Seconds"
sleep 60 echo "I just woke up!"
请建议我该怎么做?当我关闭终端选项卡时,陷阱“”HUP 似乎不起作用。
答案1
您是否考虑过使用screen
这种方法来代替nohup
?
打开 screen 会话并正常执行脚本。使用 断开会话Ctrl-a Ctrl-d
。
screen -r
当您返回时,您可以使用或可能重新连接到会话,screen -ls
并选择正确的会话进行恢复。
另请参阅:如何重新连接到断开的 ssh 会话
答案2
很确定你想要trap "" HUP
。不是trap " " HUP
。
陷阱 [-lp] [[参数] 信号规格 ...]
ARG 是 shell 收到信号 SIGNAL_SPEC 时读取并执行的命令。如果 ARG 不存在(并且提供了单个 SIGNAL_SPEC)或为“-”,则每个指定的信号都将重置为其原始值。 如果 ARG 是空字符串,则 shell 和它调用的命令将忽略每个 SIGNAL_SPEC。
不是" "
空字符串,但是""
是。