如何使用systemd部署服務?

語言: CN / TW / HK

theme: smartblue

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第10天,點選檢視活動詳情

1、前言

通常,我們在開發過程中,難免需要去部署我們的服務,但是,我們應該如何去做呢?如果主機重啟了,服務怎麼自己啟動呢?可能你的心裡已經有了幾種不同的答案,接下來我們就一起看看吧。

2、如何部署服務

假設,我們現在有一個python專案(名為xx),現在我們想要將其部署在Linux伺服器上,我們應該如何操作呢?

xx的內容

```python

!/usr/bin/python

import time i=0 while True: print i i+=1 time.sleep(60) ```

2.1、後臺程序方式啟動

第一種方式,我們可以直接將這個專案以後臺程序的方式進行啟動。

bash nohup python xx &

2.2、使用systemd方式啟動

第二種方式,我們可以通過systemd將專案進行託管。

關於systemd:systemd是Linux平臺的一款軟體,其支援以守護程序方式啟動任務,支援cgroup資源隔離,可以非常高效的在Linux啟動過程中載入我們的服務。

2.2.1、建立service檔案

xx檔案所在路徑:/root/

service檔案所在路徑:/etc/systemd/system/

xx.service內容

bash [Unit] Description=myself service [Service] ExecStart=/root/xx [Install] WantedBy=multi-user.target

由於我們在xx檔案中定義瞭解釋器,所以我們可以直接給xx增加可執行許可權,在啟動命令中直接指定xx的路徑即可。

2.2.2、啟動服務

指定service檔案使能xx服務的命令:

bash systemctl -f enable /etc/systemd/system/xx.service

啟動xx服務:

bash systemctl start xx

檢視xx服務狀態:

bash systemctl status xx

檢視服務狀態

3、如何自動啟動

3.1、自動啟動檔案

3.1.1、rc.local

對於後臺程序部署的服務,我們可以將啟動命令新增到開機自啟檔案中。

自動啟動檔案路徑:/etc/rc.local

3.1.2、rc.d

我們除了可以將啟動命令直接加入到rc.local檔案中,也可以直接將可執行指令碼移動到/etc/rc.d/init.d/路徑下。

3.2、systemd

systemd預設會在伺服器啟動的時候啟動我們的服務,因為我們已經enable了服務。但是我們為了防止服務在異常退出後無法恢復,我們可以向service檔案中增加[Service]配置塊中增加Restart=on-failure的配置以達到當服務異常退出的時候自動重啟服務的效果。