跳到主要內容

Node.js package : forever

forever為一套node.js維運套件
透過監控程式健康狀態來管理node.js程式,並在異常關閉時候重新啓動您的程式,這樣就不用怕程式因為沒有handle的exception導致異常關閉時候不能提供服務拉!

forever的安裝與使用相當簡單:

1.首先,安裝forever套件(當然,您需要先有node.js與npm套件拉!),其中-g很重要,因為您必須要安裝到系統目錄,才能夠支援在任何環境下啟動forever程式
# npm install forever -g

2.使用forever管理您的node.js程式: (這邊假設我們建立了一個express專案,app.js的路徑是/tmp/TestPrj/app.js)
啟動您的node.js程式:forever start [node.js application path]
# forever start /tmp/TestPrj/app.js 
info:   Forever processing file: /tmp/TestPrj/app.js

檢視已啓動的forever程式(就是您使用forever啓動的node.js程式):forever list
# forever list
info:   Forever processes running
data:       uid  command script              forever pid   logfile                          uptime        
data:   [0] P0Fa node    /tmp/TestPrj/app.js 50062   50079 /Users/simonsu/.forever/P0Fa.log 0:1:49:10.335 

關閉已啓動的Node程式:forever stop [forever process id]
# forever stop 0
info:   Forever stopped process:
data:       uid  command script              forever pid   logfile                          uptime       
[0] P0Fa node    /tmp/TestPrj/app.js 50062   50079 /Users/simonsu/.forever/P0Fa.log 0:2:7:29.415


如果覺得查id再做關閉麻煩,您也可以使用:forever stop [node.js application path]

# forever stop /tmp/TestPrj/app.js
info:   Forever stopped process:
data:       uid  command script              forever pid   logfile                          uptime       
[0] r0Gh node    /tmp/TestPrj/app.js 51604   51605 /Users/simonsu/.forever/r0Gh.log 0:0:0:11.932 

其他與forever相關的指令與參數,可以使用forever來查詢:
# forever
help:   usage: forever [action] [options] SCRIPT [script-options]
help:   
help:   Monitors the script specified in the current process or as a daemon
help:   
help:   actions:
help:     start               Start SCRIPT as a daemon
help:     stop                Stop the daemon SCRIPT
help:     stopall             Stop all running forever scripts
help:     restart             Restart the daemon SCRIPT
help:     restartall          Restart all running forever scripts
help:     list                List all running forever scripts
help:     config              Lists all forever user configuration
help:     set <key> <val>     Sets the specified forever config <key>
help:     clear <key>         Clears the specified forever config <key>
help:     logs                Lists log files for all forever processes
help:     logs <script|index> Tails the logs for <script|index>
help:     columns add <col>   Adds the specified column to the output in `forever list`
help:     columns rm <col>    Removed the specified column from the output in `forever list`
help:     columns set <cols>  Set all columns for the output in `forever list`
help:     cleanlogs           [CAREFUL] Deletes all historical forever log files
help:   
help:   options:
help:     -m  MAX          Only run the specified script MAX times
help:     -l  LOGFILE      Logs the forever output to LOGFILE
help:     -o  OUTFILE      Logs stdout from child script to OUTFILE
help:     -e  ERRFILE      Logs stderr from child script to ERRFILE
help:     -p  PATH         Base path for all forever related files (pid files, etc.)
help:     -c  COMMAND      COMMAND to execute (defaults to node)
help:     -a, --append     Append logs
help:     --pidfile        The pid file
help:     --sourceDir      The source directory for which SCRIPT is relative to
help:     --minUptime      Minimum uptime (millis) for a script to not be considered "spinning"
help:     --spinSleepTime  Time to wait (millis) between launches of a spinning script.
help:     --plain          Disable command line colors
help:     -d, --debug      Forces forever to log debug output
help:     -v, --verbose    Turns on the verbose messages from Forever
help:     -s, --silent     Run the child script silencing stdout and stderr
help:     -w, --watch      Watch for file changes
help:     -h, --help       You're staring at it
help:   
help:   [Long Running Process]
help:     The forever process will continue to run outputting log messages to the console.
help:     ex. forever -o out.log -e err.log my-script.js
help:   
help:   [Daemon]
help:     The forever process will run as a daemon which will make the target process start
help:     in the background. This is extremely useful for remote starting simple node.js scripts
help:     without using nohup. It is recommended to run start with -o -l, & -e.
help:     ex. forever start -l forever.log -o out.log -e err.log my-daemon.js
help:         forever stop my-daemon.js
help:   

這個網誌中的熱門文章

Oracle LISTAGG

同事介紹的一個Oracle的好用查詢:LISTAGG
SELECT A.GROUP_ID,A.KEY, LISTAGG(A.VALUE,'; ')WITHINGROUP(ORDERBYA.VALUE)as GG  fromSYS_PROPERTIESaGROUP byA.GROUP_ID,A.KEY
LISTAGG可以將group後的結果會總顯示於一個欄位 上述SQL原本A.VALUE會是一個row一個row的排列 使用LISTAGG之後,可以將A.VALUE顯示在同一個row中 並且可以指定間隔符號(在此設定為';') 針對某一些報表查詢非常有用唷 :D

使用 minikube 輕鬆上手 kubernetes

安裝minikube
macOS只需要透過brew即可快速安裝...
brew cask install minikube
Linux環境可以直接下載執行檔,放到環境變數可以吃到的路徑即可...
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && \ chmod +x minikube && \
sudo mv minikube /usr/local/bin/
Windows的下載網址如下: https://storage.googleapis.com/minikube/releases/latest/minikube-windows-amd64.exe
如果您的kubectl尚未安裝,可以直接使用google cloud sdk來安裝:
curl https://sdk.cloud.google.com | bash
gcloud components install kubectl
安裝完成後,原則上minikube會在本地端加入minikube的k8s context,我們可以透過下面指令來使用該context…
kubectl config use-context minikube
然後,可檢查一下您的minikube node是否正常運作....

新一代LB - Traefik

新一代LB-Traefik Traefik突破以往我們對loadbalancer的觀點,他是一套直接與docker整合的loadbalancer套件...透過Traefik,我們可以使用label的方式將後面啟動的dockerinstance掛載到loadbalancer中,且無需重新啟動Traefik,可直接生效... Traefik基本介紹 Traefik是以動態重載新加入的dockerinstance的方式來替有附加相同domainlabel的dockerinstance建立網路附載平衡的關聯...因此,設定上,與一般我們建立reverseproxy的過程剛好相反(一般我們會先建立服務,再建立reverseproxy將服務串連起來)... Step1-建立Traefik服務 下面我們用官方的composefile來說明... File:docker-compose.yaml version: '2' services: proxy: image: traefik command: --api --docker --docker.domain=docker.localhost --logLevel=DEBUG networks: - webgateway ports: - "80:80" - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock - /dev/null:/traefik.toml networks: webgateway: driver: bridge 其中traefik啟動時候,我們需要指定docker.domain來告訴taefik要聆聽的domain是哪一個,然後要事先開啟對應的port,讓外部服務可以連到traefik...,另外,我們將dockersocket掛載進來,這是必要的設定,讓traefik可以透過dockersocket來操控一些東西...,最後,traefik.toml檔案,我們保留空的,讓treafik自己建立... 啟動: docker-compose -f docker…