SSH 连接后执行 shell 脚本的最后几行
Execute the last lines of shell script after SSH diconnection
我有一个 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 会话在我显示的代码的第一行断开连接,脚本因此停止并且不应用设置。在启动 shell 脚本的 SSH 会话断开连接后,我如何让 shell 脚本 运行 最后几行?此外,它需要在代码中完成,而不是在启动脚本时通过 screen
或 nohup
命令完成。
也许如果您获取脚本 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
尝试通过重定向所有标准流并将其置于后台来完全断开脚本与终端的连接:
nohup 脚本 < /dev/null > script.log 2>&1 &
你也可以把"sleep 2"放在脚本的第一行,这样在把脚本放到后台后,你可以在服务器强行关闭之前快速干净地断开连接。这只是为了方便。
我有一个 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 会话在我显示的代码的第一行断开连接,脚本因此停止并且不应用设置。在启动 shell 脚本的 SSH 会话断开连接后,我如何让 shell 脚本 运行 最后几行?此外,它需要在代码中完成,而不是在启动脚本时通过 screen
或 nohup
命令完成。
也许如果您获取脚本 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
尝试通过重定向所有标准流并将其置于后台来完全断开脚本与终端的连接:
nohup 脚本 < /dev/null > script.log 2>&1 &
你也可以把"sleep 2"放在脚本的第一行,这样在把脚本放到后台后,你可以在服务器强行关闭之前快速干净地断开连接。这只是为了方便。