我有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脚本运行最后几行?此外,它需要在代码中完成,而不是在启动脚本时通过screen
或nohup
命令完成。
答案 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