1. 程式人生 > >把Nodejs做成CentOS系統服務並開機啟動

把Nodejs做成CentOS系統服務並開機啟動

CentOS的Daemon機制

systemd守護一個程序的前提條件是它知道它要守護的程序的PID。Linux程序通訊有一個不成文的規則,一個程序告訴另外一程序自己的PID的一個方法是把自己的程序的PID這個數值以文字流寫入檔案。只寫PID,其它的什麼都不用寫,大家約定俗成,把這樣的檔案的副檔名約定為pid,檔名沒有要求,部署維護的人知道它是什麼意思就行。PID檔案一般儲存到/run目錄下。當程序啟動的時候要判斷這個PID檔案是否存在,如果存在就把它刪除。如果刪除失敗進告訴使用者此程序無法被守護程序託管。當程序退出的時候要刪除此PID檔案。

啟動Nodejs網站

下面一個示例,Nodejs代替Apache,隨Linux系統開機啟動,只託管一個網站。新建一個index.htm檔案,原始碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Daemon Demo</title>
</head>
<body>
<h1 align="center">
    Daemon Demo
</h1>
</body>
</html>

這裡引用Koa快速搭建一個靜態網站,引用的元件是:Koa和Koa-Serve-Statis。網站只需要一個主程式app.js,它的原始碼如下:

var  Koa = require('koa') ;
var serveStatic=require('koa-serve-static');
var fs=require('fs');
var pidPath='/run/daemon-demo.pid';
var fd=fs.openSync(pidPath,'w+');
fs.writeSync(fd,process.pid.toString(),{flag:'w+'});
fs.closeSync(fd);
var app=new Koa();
app.use(serveStatic(__dirname,{}));
app.listen(2201);
fs.unlinkSync(pidPath);

執行:

npm i -save koa koa-serve-static
node app.js

瀏覽器確認服務啟動成功。隨後關閉網站,準備讓CentOS的守護程序啟動服務。

增加一個CentOS系統服務

新建一個名稱為daemon-demo.service的文字檔案,寫入以下程式碼:

[Unit]
Description=daemon-demo.service
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/run/daemon-demo.pid
ExecStart=/bin/setsid /usr/bin/node /var/www/daemon-demo/app.js
Restart=/bin/pkill node && /bin/setsid /usr/bin/node /var/www/daemon-demo/app.js
ExecStop=/bin/pkill node
ExecReload=
PrivateTmp=true
RemainAfterExit=yes
ExecStartPre=
 
[Install]
WantedBy=multi-user.target

把daemon-demo.service上傳到CentOS伺服器,把它複製到以下位置:

/usr/lib/systemd/system/

執行命令使服務開機自動啟動:
sudo systemctl enable daemon-demo

把網站的原始碼上傳到CentOS伺服器,並儲存到以下位置:
/var/www/daemon-demo

SELinux安全設定和防火牆的設定請參照文章:。設定完畢後啟動服務:
sudo systemctl start daemon-demo

最終效果