Linux服务器断开SSH连接后,让程序不退出继续在后台执行

Question:怎么才能让跑在linux服务器下的程序,不在SSH连接断开后,继续运行呢?

例子:比如用户在 linux 服务器配置了node环境,并且想在node环境下执行 hello.js 的脚本。

//hello.js

var http = require("http");
http.createServer(function(request, response) {
    response.writeHead(200, {
        "Content-Type" : "text/plain" // 输出类型
    });
    response.write("Hello World");// 页面输出
    response.end();
}).listen(8100); // 监听端口号
console.log("nodejs start listen 8082 port!");

运行这段脚本:

cd 当前脚本路径
node hello.js

这时linux窗口就会输出 “nodejs start listen 8082 port!”,在外网访问:域名:8082
这时是监听了8082端口,如果防火墙没设置8082规则的话(以阿里云linux服务器为例),在外网是访问不到的,需要在阿里云控制台防火墙处设置端口开放规则,设置之后在外网就可以访问了。

这里写图片描述

但是这又碰到个问题,我们是通过SSH去连接linux服务器的,当我们退出或者端口SSH连接的话,当前正在执行的脚本文件也会被停止,因为linux服务器会在你退出SSH连接后,默认关闭进程,而不会hang up进程,所以不想一直保持SSH连接,又想一直保持服务器程序运行的解决办法如下:
(这里以阿里云的CentOS系统为例)

1、安装screen命令

yum  install screen   安装

2、screen -S helloworld

创建screen会话,自定义screen虚拟终端的名称,helloworld 可以改为你想要的名称

screen用法:

  • 打开新的会话窗口:screen
  • 结束当前会话:exit
  • 在新会话中执行程序(程序关闭时会话自动结束):screen vi test.c
  • 打开新会话并起个名字:screen -S myname
  • 暂时离开会话(经常用):Ctrl+a 然后 d
  • 查看会话列表: screen -ls
  • 恢复之前离开的会话:screen -r 会话名或进程号
  • 清除dead状态的会话:screen -wipe
  • 启动一个开始就是Detached状态的会话:screen -dmS 名字 命令

3、进入/hello.js目录,运行node hello.js

linux输出:“nodejs start listen 8082 port!”

到这里就相当于创建screen新会话,并执行hello.js文件,这时发现断开SSH连接后,在外网仍然可以访问到 hello.js,在页面上输出 hello world ,到这里基本上就能解决linux服务器断开连接,程序继续后台执行的问题了~

linux 系统博大精深,少年还需努力呀 ~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值