您的位置:

Linux 后台启动的全面解析

一、介绍

Linux 是一种开源操作系统,已经成为许多服务器的首选操作系统。在管理一个 Linux 服务器时,您需要启动和管理各种服务。然而,您不想一直保持终端程序在运行,也不希望让该服务终止于终端中的实例崩溃。

这就是 Linux 后台运行的好处 — 您可以在不必要时终止终端程序,并确保您的服务在操作终端时不会意外停止。

二、怎么做?

一般情况下,要运行一个后台服务,你可能会执行下面的命令:

$ python app.py

然而,这个窗口不能随意关闭,如果服务器意外崩溃,一个简单的念头就可以停止整个应用程序。相反,在Linux中,我们可以通过以下三种方式来启动一个后台服务:

三、使用&运算符

这是最简单的一种方式。 只需要在命令的末尾加上" &" ,这样即可使命令在后台运行:

$ python app.py &

这个命令将在后台运行 Python 应用程序,因此您可以继续在同一终端窗口中运行其他命令。然而,当您关闭该终端窗口时,该服务也将停止。此方法适用于您只想暂时运行服务的情况。

四、使用nohup命令

nohup 命令用于在系统关闭时仍能保持程序运行。使用此方法,即使终端已被关闭,该程序仍将在后台继续运行:

$ nohup python app.py &

以上命令会在后台启动 Python 应用程序,并将输出记录到 nohup.out 文件中。此外,此方法还将为该应用程序分配一个进程 ID(PID),以便稍后可以使用类似于 kill 命令的命令来终止它。

五、使用systemd socket系统

systemd socket可用于并发地启动多个实例,其中一个是正在运行的实例,而其他实例则在等待连接。当需要连接该服务时,该服务始终处于后台运行,因此您可以在无需打开终端的情况下启动和关闭它。

要使用 systemd socket,请按照以下指南操作:

1. 创建一个应用程序的服务文件.myapp.service:

[Unit]
Description=My Python Service

[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=always
User=nobody
# note that user "nobody" is included so you can adjust as necessary
Group=nobody
# only systemd 230 and later have this option
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

在该文件中,您需要指定要运行的应用程序的位置,并包括重要的重启指令。

2. 创建.socket文件,命名为myapp.socket:

[Socket]
ListenStream=90

[Install]
WantedBy=sockets.target

主要是指定监听端口,将代码放入/opt/myapp/socket。

3.创建一个应用程序之间的symlink路径:

$ sudo systemctl link /opt/myapp/myapp.socket

它将连接myapp.service和myapp.socket文件,允许同时启动多个服务,其中只有一个正在运行。因此,被链接的服务将永久后台运行。

六、小结

总之,在 Linux 中,您可以使用运算符&、nohup命令和systemd socket来启动一个后台服务。每种方式都有自己的优缺点,您可以根据实际需求来选择最适合您的方式。