天天看點

Node 應用的 Systemd 啟動一、克隆代碼

本文是獨立的,不需要前面的教程作為預備知識。

Node 應用的 Systemd 啟動一、克隆代碼

上面腳本裡面,有五個地方出現了四個占位符。

<code>[/path/to/node/executable]</code>:node可執行檔案的絕對路徑 <code>[path/to/node-systemd-demo]</code>:示例庫的絕對路徑 <code>[yourusername]</code>:你的使用者名 <code>[yourusergroup]</code>:你的組名

你需要将上面這四個占位符,改成自己電腦的設定。下面是一個已經改好的例子。

如果你不知道這幾個占位符的值,下面的指令可以幫你找出來。

簡單解釋一下,上面的配置檔案的幾個參數。

<code>unit</code>區塊的<code>description</code>字段,是服務的簡單描述。

<code>service</code>區塊的字段含義如下。

<code>execstart</code>:啟動指令 <code>restart</code>:如何重新開機。<code>always</code>表示如果程序退出,總是重新開機 <code>environment</code>:環境變量 <code>workingdirectory</code>:工作目錄

<code>install</code>區塊的<code>wantedby</code>字段指定,設為開機啟動時,該服務所在的 target 是<code>multi-user.target</code>。

現在将配置檔案拷貝到 systemd 之中。

接着,就啟動服務。

通路 http://0.0.0.0:5000,應該看到網頁顯示"hello world"。

如果啟動失敗,或者想檢視日志,就要執行下面的指令。

如果想設為開機啟動,就要執行<code>systemctl enable</code>。

一般情況下,學到這裡,應該就夠用了。如果你還想體驗一下 systemd 的強大功能,請接着往下讀。

我們知道,http伺服器啟動在那裡,終究是耗費資源的。那麼能不能做到,隻有有人通路時,才啟動服務,否則就關閉?

這在 systemd 裡面叫做"socket 激活"。開發者可以指定 socket 監聽的端口,系統根據有沒有收到請求,自動啟動或關閉服務。不難想到,隻要前面加一層負載均衡器,這就等同于實作了一個簡單的雲服務,即根據通路量,系統自動擴容或收縮。

下面就是"socket 激活"的demo。

首先,請确認前面啟動的 node 服務已經被關閉了,5000 端口已經釋放出來了。

現在,安裝依賴。

socket 激活需要兩個配置檔案。

上面這個檔案需要改寫占位符。可以看到,由于不是開機啟動,配置檔案裡面沒有<code>install</code>區塊;由于不需要重新開機,也沒有<code>restart</code>字段。

改寫後,将它們拷貝到 systemd。

然後,執行下面兩個指令,啟動 socket 激活。

這個時候,檢查一下狀态。

可以看到,<code>node-socket-server.socket</code>是激活的(active),而<code>node-socket-server.service</code>沒有(inactive)。

這時通路 http://0.0.0.0:5000 ,會發現網頁可以正常通路。

然後,再檢查一下狀态。

這時,<code>socket</code>和<code>service</code>都激活了。

此時,如果手動停止 http 伺服器,systemd 會發出一個警告。

上面的警告表示,socket 依然是激活的,是以服務随時可能被重新開機,是以還需要關閉 socket 激活。

(完)