專案部署的常用程序管理命令

封面
在實際的專案部署中, 最常用的系統環境還是 Linux, 熟悉常用的管理命令, 特別是程序管理命令 (專案在系統中也以程序形式存在) 很有必要.
今天的命令包括:
- 檢視程序列表
- 檢視程序具體資訊
- 向程序傳送訊號
- 檢視程序開啟的檔案
- 檢視檔案的使用情況
- 檢視端口占用列表
- 檢視具體端口占用
檢視程序命令
ps
ps -ef
ps aux
上面兩個命令沒啥大區別, 都支援 grep 篩選, 如果不加 aux / -ef 顯示的是處於執行態的程序, 加了顯示所有程序及其狀態. 如果對其他引數有要求, 可以再手動 man ps 檢視.
ubuntu@VM-90-6-ubuntu:~$ ps aux | grep mongo mongodb895 61.2 31.2 1621296 599100 ?Ssl2018 116981:09 /usr/bin/mongod --config /etc/mongod.conf ubuntu196550.00.010468920 pts/0S+10:010:00 grep --color=auto mongo
Linux 程序狀態碼:
D 不可中斷 uninterruptible sleep (usually IO)
R 執行 runnable (on run queue)
S 中斷 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
有同學會問, 你上面那個不是Ssl和S+嗎? 又是什麼鬼. 看完下面這個就知道了(不是很重要, 瞭解一下就行)
Stat狀態解釋:
X 死掉的程序
< 高優先順序
N 低優先順序
L 有些頁被鎖進記憶體
s 包含子程序
+ 位於後臺的程序組;
l 多執行緒,克隆執行緒 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
檢視程序具體資訊
前面我們用 ps aux 命令後輸出的資訊第一列是 USER , 第二列是 PID
如果想看程序的具體資訊可以進入到 /proc/PID 資料夾檢視詳細資訊, 這裡體現了 Linux 中一切皆檔案的思想, 程序也是系統一種特殊檔案. 因為 Linux 命令支援多個選項混合, 這裡我們用 ls -ahl 來檢視此程序資料夾下的所有檔案. 若 不帶 sudo , 則有 部分檔案沒有許可權檢視詳細 .

image.png

示例
根據 man ls 顯示的資訊, ahl分別是:
-a, --all do not ignore entries starting with . -h, --human-readable with -l, print sizes in human readable format (e.g., 1K 234M 2G) -luse a long listing format
換算為人話就是顯示包括 . 開頭的檔案在內的所有檔案, 配合-l以人類可讀的格式顯示大小. 如果你用 -A 則忽略了 . 開頭的檔案, A代表Almost 幾乎的意思 .
此外跟蹤程序狀態詳情可以用 strace -p PID 命令檢視.
有同學會問為啥有的檔案紅色, 有的藍色?
這裡列一些Linux 檔案的色彩含義:
綠色-->代表可執行檔案
紅色-->代表壓縮檔案
深藍色-->代表目錄
淺藍色-->代表連結檔案
灰色-->代表其它的一些檔案
向程序傳送訊號
最常見的是 kill -9 PID 這個命令. 可以強制殺死一個程序. 這裡的 -9 實際上是 SIGKILL 訊號, 我們可以用 kill -l 檢視所有訊號. 下面只是一部分.
1) SIGHUP2) SIGINT3) SIGQUIT4) SIGILL5) SIGTRAP 6) SIGABRT7) SIGBUS8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
除了上面的 kill , 平時我們也會用 Ctrl+C 傳送 SIGINT 終止前臺程序, Ctrl+Z 傳送 SIGTSTP 掛起程序.
檢視程序開啟的檔案
lsof -p PID如果不使用 sudo ,會有部分檔案顯示 unknown 型別.

image.png
檢視檔案使用情況
lsof path/of/file
檢視端口占用列表
專案部署自然離不開埠的資訊, netstat 是 Linux 的一個常用網路分析工具, 命令選項很豐富, 感興趣可以自己 man 一下.
檢視埠時,我們更偏向於 檢視監聽的埠來確定服務是否啟動 , 用 netstat -nltp 顯示正在監聽的TCP連線對應的IP和程式, n - numerical, l - listening(這裡就不是list了), t - tcp, u - udp, p - program.
如果不使用 sudo, PID 一欄可能會以 -
省略.

示例
檢視埠具體佔用
有時候我們啟動了一個專案忘記終止, 隨後又開啟了一個專案使用了相同的埠, 這時候就需要這個命令來確定具體程序, 把程序殺死.
lsof -i :port(冒號別忘了) 如果你命令按下後空白, 仔細看看有沒有少了sudo?

示例
有了上述的命令再進行專案部署操作會更方便查錯. 有不清楚的除了 Google, 也別忘了 Linux 手冊命令 man.