如何在SSH断开后让远程服务器程序继续运行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SSH断开后让远程服务器程序继续运行相关的知识,希望对你有一定的参考价值。
主要有两种方法,分别如下,可以参考一下:用nohup命令,另一种是用screen工具。因为nohup比较方便,所以采用这种方法.
当SSH网络断开后,会向该连接相关所有会话进程发一个SIGHUP信号,收到这个信号的进程默认是终止运行,nohup命令的作用就是让进程不接收到该信号,这样就可以在SSH断开后保证程序继续运行。同时如果该程序有标准输出,则使用nohup命令后,输出会自动被重定向到该程序的目录下的nohup.out文件中,如果当前目录的nohup.out文件不可写,则会重定向到$HOME/nohup.out文件中。 参考技术A 今天在一个技术群中看到有人在讨论这个问题,刚好手头上正在做物联网项目,也遇到这么个问题,只是之前一直在测试阶段,没怎么把这个问题放在心上,断了重新连接就可以了,只是麻烦一点罢了。不过过阵子要出差,后面还要演示,不可能再继续这样一直用ssh连着重新启动各种远程程序,该准备的还是先准备好,以防到时出错,所以刚刚特意就这个问题搜了一下解决方法。
有两种方法:一是用nohup命令,另一种是用screen工具。因为nohup比较方便,所以采用这种方法,关于screen的具体用法,可以参考上面的博文。
当ssh网络断开后,会向该连接相关所有会话进程发一个sighup信号,收到这个信号的进程默认是终止运行,nohup命令的作用就是让进程不接收到该信号,这样就可以在ssh断开后保证程序继续运行。
linux远程开发工具byobu和sublime的SFTP
linux远程开发工具
对话管理工具 byobu
当程序放在远程服务器上运行时,如果连接断开,程序将停止在服务器上运行。或者程序需要执行的时间较长,而超出一定时长后,XShell会自行断开连接,导致程序运行被终止。
在跑深度网络,或下载测试数据时,由于网络不稳定,ssh连接可能会断开,程序终止运行。
为了保证程序能够在断开连接后依然正常运行,且将输出保存到指定文件中,可以使用screen,tmux,byobu,其中推荐使用byobu。
byobu使用screen或tumx作为后端,使用起来简单快捷。首先安装byobu,并使用screen作为后端:
sudo apt install screen byobu -y
byobu-select-backend
Select the byobu backend:
1. tmux
2. screen
Choose 1-2 [1]: 2
然后为正常显示中文,修改编码配置项,vi ~/.byobu/.screenrc
defutf8 on
defencoding utf8
encoding UTF-8 UTF-8
就可以正常使用byobu创建后台对话了。推荐使用的方式是byobu -S wz
创建名为wz的对话
创建window:F2
切换window:F3(左)F4(右)
临时断开与session的链接:F6
断开session后再次进入:byobu -r jayzon
进入Copy模式:F7,进入后可以以类似vim的模式向上翻页,查看历史log
关闭window:ctrl-d
强制关闭window:ctrl-a k后输入y确认
重命名window:F8 (部分环境下需要使用ctrl-a A代替),然后输入window的名字
如果创建了多个对话,可以通过byobu-select-session
进行选择。
SFTP进行远程与本地文件同步
首先在本地创建一个新文件夹,用于与远程文件夹同步。
然后通过package control安装SFTP插件,在文件夹上右键选择SFTP,Map到远程文件夹,生成一个sftp-config.json
的控制文件。
填上地址,端口,用户和密码,就建立起了映射。
可以在"ignore_regexes"
选项中添加忽略的文件后缀和文件夹。
具体可以看https://codexns.io/products/sftp_for_sublime/faq#Ignore。
其中"\.jpg"
表示忽略该文件夹及其子文件夹下的所有jpg文件夹,"/venv/"
表示忽略pycharm中的虚拟环境文件夹venv。
{
// The tab key will cycle through the settings when first created
// Visit http://wbond.net/sublime_packages/sftp/settings for help
// sftp, ftp or ftps
"type": "sftp",
"save_before_upload": true,
"upload_on_save": false,
"sync_down_on_open": false,
"sync_skip_deletes": false,
"sync_same_age": true,
"confirm_downloads": false,
"confirm_sync": true,
"confirm_overwrite_newer": false,
"host": "example",
"user": "root",
"password": "aa",
"port": "37089",
"remote_path": "/root/SSD/",
"ignore_regexes": [
"\.sublime-(project|workspace)", "sftp-config(-alt\d?)?\.json",
"sftp-settings\.json", "/venv/", "\.svn/", "\.hg/", "\.git/",
"\.bzr", "_darcs", "CVS", "\.DS_Store", "Thumbs\.db", "desktop\.ini",
"/weights/", "/datasets/", "/build/", "/models/", "/.github/",
"\.jpg", "\.png", "\.pt", "\.pth", "\.so", "\.pyc"
],
//"file_permissions": "664",
//"dir_permissions": "775",
//"extra_list_connections": 0,
"connect_timeout": 30,
"keepalive": 60,
//"ftp_passive_mode": true,
//"ftp_obey_passive_host": false,
//"ssh_key_file": "~/.ssh/id_rsa",
//"sftp_flags": ["-F", "/path/to/ssh_config"],
//"preserve_modification_times": false,
//"remote_time_offset_in_hours": 0,
//"remote_encoding": "utf-8",
//"remote_locale": "C",
//"allow_config_upload": false,
}
以上是关于如何在SSH断开后让远程服务器程序继续运行的主要内容,如果未能解决你的问题,请参考以下文章