我是shell脚本的菜鸟,我尝试搜索但找不到解决方案。
我的互联网连接不好而且一直在下降。我必须在远程服务器上运行某些命令。当我在终端上运行ssh并运行这些命令并且连接断开时,我不确定命令是否继续或者它也停止(我假设它的行为就好像已经收到了Ctrl ^ C.我是否正确?)
现在我已将所有命令放在shell脚本中。 ftp-ed在服务器上,并通过ssh在终端上运行它。这是否可以保证即使连接断开也会运行我的命令。或者我应该将其包装在另一个shell脚本中吗?
谢谢。
答案 0 :(得分:3)
如果您需要保留在连接断开后使用nohup
远程运行的命令。有关详细信息,请参阅man nohup
。我想你需要做的就是在远程方面运行:
nohup /path/to/your_script.sh &
更确切地说,每当连接断开时,在服务器端发生超时,套接字就会关闭,并且所有进程都属于ssh连接进程的进程树。
答案 1 :(得分:2)
您需要查看输出吗?
如果是,请使用screen
,它可以有效地运行服务器上的所有内容,并允许您远程连接到屏幕。
如果不这样做,那么您可以使用nohup
来介绍该过程。这样做时,请确保重定向标准流,即
nohup script_to_run &>/dev/null </dev/null &
答案 2 :(得分:0)
使用nohup
从screen
会话
答案 3 :(得分:0)
要保证即使断开连接也会运行命令或脚本,请使用nohup
。
要获得更多控制权,请使用GNU Screen(您将能够重新连接并返回正在运行的命令的终端)。
man nohup
和man screen
有更多信息。