我有一个 bash 脚本 test.sh
node ~/script1.js &&
node ~/script2.js &&
node ~/script3.js
我启动 bash 脚本
nohup ~/test.sh &
然后由于失去与服务器的连接,我断开连接。我希望脚本在我使用 nohup 时继续,但是节点脚本收到挂断信号。
正确的方法是什么?
如果您知道要经常断开连接,最好的选择是使用screen
或tmux
或类似功能,这样您就可以根据需要断开连接并稍后重新连接。 要做到这一点,如果你在一个交互式shell上,你可以,比如说,运行screen
,然后运行你的命令(不需要nohup
或将其放在后台(,然后键入ctrla,然后d与该屏幕会话分离。 然后,您可以退出,屏幕会话和命令将继续。
有了screen
,如果只有一个会话screen
,则可以通过运行screen -x
来重新连接到会话,或者你可以为-x
提供一个参数来指定要重新附加到哪个会话(您可以在开始使用screen
时为它命名-S
标志,以便更容易记住要重新连接到哪个会话(。 您可以使用screen -ls
查看当前正在运行的screen
会话的列表。
tmux
也支持做所有这些,但我自己更熟悉screen
。
如果要像当前尝试一样使用nohup
执行此操作,则还需要disown
该命令,这将从当前 shell 中删除该作业。 如果这是唯一可以disown -a
disown
所有工作的方法。