一、介紹
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來啟動一個後台服務。每種方式都有自己的優缺點,您可以根據實際需求來選擇最適合您的方式。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/254812.html