在SSH diconnection之后执行最后一行shell脚本

时间:2015-02-12 18:02:34

标签: linux bash shell ssh

我有shell script用于在bash的linux机器上设置网络设置,它主要用于 SSH 。以下是脚本的最后几行。

service network stop
rm -rf $NETWORKFILE
touch $NETWORKFILE
echo NETWORKING=yes > $NETWORKFILE
echo HOSTNAME=$HOSTNAME >> $NETWORKFILE
mv $ETHFILE /etc/sysconfig/network-scripts/ifcfg-eth0
service network start

如您所见,要应用网络设置,必须停止然后启动网络并在网络关闭时应用设置。这将导致SSH会话在我显示的代码的第一行上断开,并且脚本因此停止并且设置不被应用。在SSH会话断开连接启动shell脚本后,如何让shell脚本运行最后几行?此外,它需要在代码中完成,而不是在启动脚本时通过screennohup命令完成。

2 个答案:

答案 0 :(得分:1)

尝试通过重定向所有标准流并将其置于后台来完全断开脚本与终端的连接:

nohup脚本< / dev / null> script.log 2>& 1&

此外,您可以将“sleep 2”作为脚本的第一行,这样在将脚本放入后台后,您可以在服务器强行关闭之前快速断开连接。这只是为了方便。

答案 1 :(得分:-1)

也许如果你得到你的脚本PID,然后在停止网络后取消该过程,你的脚本将在断开ssh会话后继续运行。

./ script&


    pid=$$ 
    disown -h $pid 
    service network stop
    rm -rf $NETWORKFILE
    touch $NETWORKFILE
    echo NETWORKING=yes > $NETWORKFILE
    echo HOSTNAME=$HOSTNAME >> $NETWORKFILE
    mv $ETHFILE /etc/sysconfig/network-scripts/ifcfg-eth0
    service network start