一、介绍
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来启动一个后台服务。每种方式都有自己的优缺点,您可以根据实际需求来选择最适合您的方式。