Ubuntu系統進程管理筆記

前言

今天對前端服務器進行遷移,本來前端服務器就一臺,都是放置前端靜態文件的地方,應該是比較簡單的。唯一的問題是由於Nginx需要給ie8瀏覽器個i同https訪問支持,不得不對Nginx進行重新編譯。編譯完成後想啓動一下服務,才發現沒有systemctl,於是使用service命令,奇怪的是service命令無法居然無法識別nginx服務。經過一番折騰終於解決了問題。
以前這些命令一直是拿來就用,沒什麼深究,只有遇到了問題才知道基礎的重要性。下面就對這些東西做個簡單的記錄。

進程管理工具

Linux進程管理常用的工具有service、systemctl、update-rc.d等。其中越來越多的發行版使用systemctl作爲程序的的管理工具。問題就在於今天我所使用的Ubuntu版本是14.04,也就是還沒有把systemctl作爲默認的軟件啓動管理工具。systemctl是15.0x之後的版本才作爲自帶的進程管理工具的。

SysV/Upstart/systemd是什麼

簡單的說,他們是系統初始化時的第一個進程,也就是pid爲1的進程,可以通過ps -p 1 命令來檢測。

$ ps -p 1

如顯示的數據類似於:

PID TTY          TIME CMD
    1 ?        00:00:02 systemd

若顯示systemd則爲systemd,顯示init則爲Upstart。

在第一個進程啓動之後,這個進程負責啓動其它設置了開機自啓動的進程。這就帶出了一個概念,這些開機自啓或者不自啓的信息存放在哪裏?

在Ubuntu系統中,通過SysV管理的進程啓動信息放在/etc/init.d/文件夾中,裏面的文件實際上是一些shell腳本,運行這些腳本就能啓動或停止這些進程。而它對應的管理工具就是update-rc.d命令。
例如要啓動nginx服務,可以通過sudo update-rc.d nginx enable實現。

通過Upstart管理的進程啓動信息放在/etc/init文件夾中,其中都是.conf後綴的配置文件,與其對應的命令行管理工具是initctl。我們可以通過在/etc/init中編寫相應的配置文件達到啓動服務的目的。

通過systemd管理的進程啓動信息放在/etc/systemd/system/lib/systemd/system/var/lib/systemd 幾個文件夾中,例如通過命令locate nginx.service就會得到以下的位置信息:

/etc/systemd/system/multi-user.target.wants/nginx.service
/lib/systemd/system/nginx.service
/var/lib/systemd/deb-systemd-helper-enabled/nginx.service.dsh-also
/var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/nginx.service

配套的命令行工具是systemctl。可以通過命令 sudo systemctl enable nginx.service 將服務加到開機自啓動中。需要注意的是如果不是軟件安裝時生成的.service文件,而是自己在上述位置寫相應的文件的話,需要使用systemctl daemon-reload命令重新加載新的腳本才能使用。

另一個有用的命令是service,它兼容了update-rc.dinitctl命令的功能,兩種啓動方式都能使用。常用命令例如service nginx status

每臺Linux服務器只能有一個系統初始化軟件,從歷史上說先有SysV,到Upstart,再到systemd。比較新版的Linux發行版很多都以systemd作爲初始化管理軟件。

systemd是在Ubuntu15.04纔開始作爲默認初始化程序的。

參考:
https://www.techforgeek.info/enable_disable_service_on_ubuntu.html
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1416728
https://segmentfault.com/a/1190000009723940
https://stackoverflow.com/questions/7646972/nginx-invalid-pid-number
https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章