trap "" HUP vs Nohup ? 如何在 nohub 模式下运行部分 shell 脚本?

trap "" HUP vs Nohup ? 如何在 nohub 模式下运行部分 shell 脚本?

我想在周末运行一个 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。

不是" "空字符串,但是""是。

相关内容