前言

在我目前的知识范围内,在 Linux 服务器上部署服务有两种途径:

  1. 通过 Docker ;
  2. 直接在服务器中配置环境并运行;

当然,非常显然的是一般情况下,Docker 都更加方便且安全,但是不可避免有时候会存在需要直接在服务器中进行部署的情况。
而为了实现这种需求,就出现了这样一个问题:
当你通过终端启动服务(包括通过运行脚本来启动服务)后,想要退出服务器。可是当你退出服务器以后终端进程就结束了,而刚刚启动的服务也随之结束了。我们当然不希望服务只有我们连接服务器的时候才能正常运行,所以我们需要一些方法来解决这个问题,同时我们还需要能够检查到所有的日志信息。

screen

当你在操作自己的机器的时候,你可以通过新建标签页或者打开一个新的终端等方法来同时操作多个终端,但是在服务器上这比较困难,你最多通过Ctrl+z挂起服务,但这显然不是我们希望看到的。所以我们可以使用screen命令。

  • 首先我们需要在服务器上安装screen,这一步略;
  • 在本专题下,主要会用到这么几项操作:

    1. screen -S {screen name}
    1. screen -ls

    image.pngimage.png
    根据查看的结果,可以使用4549或者pts-0或者pts-0.pc来重新连接这个 screen session :

    1. screen -r {id/name}
  • 不结束当前 session 返回最初的 session,可以使用Ctrl+a+d

  • 结束当前 session,可以使用Ctrl+d

所以,使用 screen 来实现需求,只需要按照如下步骤:

  1. screen -S {proj name}
  2. {do your options here}
  3. # ctrl + a + d to leave
  4. screen -ls # check the session
  5. screen -r {proj name} # link to the session

nohup

nohupno hang up,效果上就是让进程在后台独立运行,终端退出后进程不结束。相对应的,我们也不能通过关闭终端来直接结束服务。
用法如下:

  1. nohup {your command} & # use '&' to let the session run at backstage

因为日志不再在屏幕输出了,所以可以写一个输出文件来记录日志

  1. nohup {your command} > logfile.log & # use '&' to let the session run at backstage

Ref