Posted on

使用pm2管理伺服器

pm2的操作

1. 安裝PM2
npm install pm2 -g
2. 啟動服務
pm2 start app.js
3. 啟動N個名為SERVICE_NAME的服務的進程
pm2 start app.js -i N --name SERVICE_NAME
4. 重啟服務
npm restart SERVICE_NAME
5. 設定記憶體使用超過多少後自動重啟伺服器
pm2 start app.js --max_memory_restart 1024M
6. 監控服務
pm2 monit

查看服務進程數

1. 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l

2. 查看每個物理CPU中的核數
cat /proc/cpuinfo| grep "cpu cores"| uniq

3. 查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l

確認是否使用nginx

nginx的主要功能如下

  • 反向代理,實現簡單的負載均衡: 如果有多台服務器或者一台服務器多個端口,可以考慮用nginx。
  • 靜態資源緩存:把一些靜態資源(如靜態頁面,js等資源文件)放到nginx裡,可以極大的提高服務的性能。

日誌問題

日誌系統對於任意應用而言,通常都是必不可少的一個輔助功能。pm2的相關文件默認存放於$HOME/.pm2/目錄下,其日誌主要有兩類:

  • pm2自身的日誌,存放於$HOME/.pm2/pm2.log;
  • pm2所管理的應用的日誌,存放於$HOME/.pm2/logs/目錄下,標準誰出日誌存放於${APP_NAME}_out.log,標準錯誤日誌存放於${APP_NAME}_error.log;

pm2支持配置文件啟動

pm2 ecosystem:生成配置文件ecosystem.json
pm2 startOrRestart /file/path/ecosystem.json :通過配置文件啟動服務

如下是開發時ecosystem.json的內容:

{ 
    apps : [
        { 
            name : "nova", 
            max_memory_restart: "300M", 
            script : "/root/nova/app.js", 
            out_file : "/logs/nova_out.log", 
            error_file : "/logs/nova_error.log", 
            instances : 4, 
            exec_mode : "cluster", 
            env: {
                NODE_ENV: "production"
            }
        }
    ]
}


採用cluster模式啟動了4個服務進程;如果服務佔用的內存超過300M,會自動進行重啟。


更多相關知識請見官網:ecosystem-file

支援自動化部署

一個簡單的process.json範例

{
   "apps" : [{
      "name" : "HTTP-API",
      "script" : "http.js"
   }],
   "deploy" : {
     // "production" is the environment name
     "production" : {
       "user" : "ubuntu",
       "host" : ["192.168.0.13"],
       "ref"  : "origin/master",
       "repo" : "git@github.com:Username/repository.git",
       "path" : "/var/www/my-repository",
       "post-deploy" : "npm install; grunt dist"
      },
   }
}


/bin/bash:

# Setup deployment at remote location
$ pm2 deploy production setup

# Update remote version
$ pm2 deploy production update

# Revert to -1 deployment
$ pm2 deploy production revert 1

# execute command on remote machines
$ pm2 deploy production exec "pm2 reload all"


更多介紹請見官網:simple-deploy

Posted on

查看某個Linux裡服務的狀態

程序管理指令ps

ps指令可以將某個時間點的程序運作情況擷取下來

僅觀察自己的 bash 相關程序: ps -l

觀察系統所有程序: ps aux

若覺得這個列表太長,可以使用grep來獲取想要知道的服務,例如
[root@study ~]# ps aux | egrep '(cron|rsyslog)'

使用service命令

下面指令可以查詢單個服務的運行狀態
[root@localhost ~]# service sshd status

使用服務管理工具

請參考這篇文章:linux管理Service的指令

參考資料

Posted on

給予使用者帳號sudo權限

創建使用者帳號

  • 使用有root權限的使用者登入系統
  • 使用useradd來創建一個普通的使用者帳號
    # useradd USERNAME
  • 設定這個使用者的密碼
    # passwd USERNAME
    Changing password for user USERNAME.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
  • 使用visudo去編輯/etc/sudoers檔案
    # visudo
  • 尋找下面這行代表擁有sudo權限的群組的設定,並移除前面的#字號
    ## Allows people in group wheel to run all commands
    # %wheel ALL=(ALL) ALL
  • 新增剛剛創建的使用者進入剛剛的群組裡
    # usermod -aG wheel USERNAME

測試是否有成功給予權限

  • 轉換身份至剛剛創建的帳號
    # su USERNAME -
  • 查看所在群組
    $ groups
    USERNAME wheel
  • 測試sudo指令
    $ sudo whoami
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

    [sudo] password for USERNAME:
    root

參考資料

Posted on

Hard Link與Symbolic Link的比較

硬連結 (Hard Link)

其特性如下:

  • 以相同的i-node指向相同的檔案。
  • 主要用於備份。
  • 只能在同一個磁區 (Partition)中建立。
  • 只能連結檔案,不能連結目錄。
  • 指令為ln (原始檔案) (目地檔案)

如果我們對某個檔案做了硬連結,那麼若刪掉了其中一個,另一個仍然會可以讀去,但是,hard link 是有限制的:

  • 不能跨 Filesystem
  • 不能 link 目錄。

使用範例

軟連結 (Symbolic Link)

其特性如下:

  • 以絕對路徑或相對路徑指向原始的檔案。
  • 主要用於簡化路徑。
  • 類似MS-Windows下的「建立捷徑」的功能。
  • ln -fsv (原始檔案) (目地檔案)

這個的概念就很像windows裡面的捷徑概念,當來源檔被刪除之後,symbolic link 的檔案會開不了。
但是他可以跨FileSystem也可以link目錄,在使用上相對會較為方便。

使用範例

Posted on

使用 systemctl 操作系統層級

列出所有的系統層級

# systemctl list-units --type target

顯示目前系統預設運作層級

# systemctl get-default

切換運作層級至文字模式(runlevel 3)
# systemctl isolate multi-user.target

顯示某個服務的系統層級

若要查看某個服務現在執行的系統層級,可使用下列指令
systemctl show -p WantedBy service-name

服務的runlevel有下面這些:

對照chkconfig的runlevel如下:

Posted on

linux管理Service的指令

systemctl命令

systemctl命令是系統服務管理的指令,它將servicechkconfig這兩個命令組合到一起。

systemctl語法使用介紹

[root@study ~]# systemctl [command] [unit]

command 主要有:
start :立刻啟動後面接的 unit
stop :立刻關閉後面接的 unit
restart :立刻關閉後啟動後面接的 unit,亦即執行 stop 再 start 的意思
reload :不關閉後面接的 unit 的情況下,重新載入設定檔,讓設定生效
enable :設定下次開機時,後面接的 unit 會被啟動
disable :設定下次開機時,後面接的 unit 不會被啟動
status :目前後面接的這個 unit 的狀態,會列出有沒有正在執行、開機預設執行否、登錄等資訊等!
is-active :目前有沒有正在運作中
is-enabled:開機時有沒有預設要啟用這個 unit

使用範例

  • 開啟atd服務
    [root@study ~]# systemctl start atd.service
  • 關閉atd服務
    [root@study ~]# systemctl start atd.service
  • 查看現在狀態
    [root@study ~]# systemctl status atd.service
  • 開機時自動開啟
    [root@study ~]# systemctl enable atd.service
  • 開機時不要自動開啟
    [root@study ~]# systemctl disable atd.service
  • 查看所有已啟動的服務
    [root@study ~]# systemctl list-units --type=service
  • 重啟某服務
    [root@study ~]# systemctl restart atd.service
Posted on

目錄刪除rm相關指令

rmdir指令

許多人刪除資料夾時仍會使用rmdir指令,這個指令在刪除空資料夾時是OK的,但是若資料夾內有其他檔案時,便會顯示錯誤

並且這個指令只能刪除資料夾而無法刪除檔案。

rm指令

rm:remove 刪除目錄或檔案
若要完全刪除一個含有內容的資料夾,則應加上-rf參數。
也就是
rm -rf 目錄名字

  • -r 就是向下遞迴,不管有多少級目錄,一併刪除
  • -f 就是直接強行刪除,不作任何提示的意思
  • -d 直接刪除目錄,目錄裡面不能有檔案或是資料夾。
  • -i 刪除之前會詢問,如果要刪除建議使用這個參數,可以避免誤刪。

1、刪除資料夾:
rm -rf /var/log/httpd/access
將會刪除/var/log/httpd/access目錄以及其下所有檔案、資料夾

2、刪除檔案使用:
rm -f /var/log/httpd/access.log

Posted on

node.js和npm離線安裝

離線安裝node.js和npm

1.下載官方安裝包並拷貝到離線機器上。

官方下載地址:https://nodejs.org/en/download/

2.解壓檔案:

tar-xJf node-v8.9.4-linux-x64.tar.xz

2.放到相應目錄例如/opt/

sudo mvnode-v8.9.4-linux-x64 /opt/

3.建立檔案連結使npm和node命令到系統命令

sudo ln -s /opt/node-v8.9.4-linux-x64/bin/node /usr/local/bin/node
sudo ln -s /opt/node-v8.9.4-linux-x64/bin/npm /usr/local/bin/npm

4.檢查是否安裝成功

node-v

npm-v
Posted on

在Linux離線安裝pm2

事前準備

  • 先在一台能連網的Linux服務器上安裝pm2
    npm install pm2 -g
  • 查詢本機npm預設的全域安裝目錄
    npm config get prefix
    如果顯示/usr/local/node,則npm預設的全域安裝目錄是/usr/local/node/lib/node_modules/
  • 在預設的全域目錄下找到pm2
    cd /usr/local/node/lib/node_modules/
  • 打包pm2
    tar -cvzf pm2.tar.gz pm2

安裝方式

  • 上傳到無網路的Linux伺服器的npm預設的全域目錄下,解壓縮。
    tar -xvzf pm2.tar.gz
  • 重新編譯
    npm build pm2 -g
  • 大功告成,檢驗安裝是否可用。
  • pm2 -v
    如果可以看到軟體資訊代表安裝成功
Posted on

取得Linux安裝的系統的版本


取得核心版本資訊

  1. uname -a

查看linux 系统核心版本及系統名稱

  1. cat /proc/version

查看目錄/proc下version的信息,也可以知道目前系統的核心版本名稱

取得作業系統版本資訊

  1. 查看 /etc/*-release
ls -l /etc/*-release
cat /etc/redhat-release

並可以用下面指令查看更詳細的說明

cat /etc/os-release


2. 使用 lsb_release 指令查詢
lsb_release 是一個用來查詢 Linux 發行版資訊的指令,但是並不是每一種 Linux 發行版預設都會安裝這個指令,使用時要碰運氣,像我的版本就沒有這個指令