CentOS7設(shè)置nginx開機(jī)自啟動(dòng)

前言

服務(wù)器每次重啟,都需要手動(dòng)啟動(dòng)一些服務(wù),這不是一個(gè)程序員可以忍受的,難怪大家都喜歡寫腳本。接下來(lái)三篇文章,分別記錄一下nginx、tomcat和mysql的開機(jī)自啟動(dòng)配置。

systemd

systemd簡(jiǎn)介

CentOS7已不再使用chkconfig管理啟動(dòng)項(xiàng),而是使用systemd。關(guān)于systemd的衍生和發(fā)展,可以參見(jiàn)《CentOS7/RHEL7 systemd詳解》《CentOS7進(jìn)程管理systemd詳解》。簡(jiǎn)單介紹如下:

Linux系統(tǒng)從啟動(dòng)到提供服務(wù)的過(guò)程是這樣,先是機(jī)器加電,然后通過(guò)MBR或者UEFI加載GRUB,再啟動(dòng)內(nèi)核,內(nèi)核啟動(dòng)服務(wù),然后開始對(duì)外服務(wù)。

SysV init、UpStart、systemd主要是解決服務(wù)引導(dǎo)管理的問(wèn)題。

SysV init是最早的解決方案,依靠劃分不同的運(yùn)行級(jí)別,啟動(dòng)不同的服務(wù)集,服務(wù)依靠腳本控制,并且是順序執(zhí)行的。在CentOS5中使用,配置文件為/etc/inittab。
SysV init方案的優(yōu)點(diǎn)是:原理簡(jiǎn)單,易于理解;依靠shell腳本控制,編寫服務(wù)腳本門檻比較低。
缺點(diǎn)是:服務(wù)順序啟動(dòng),啟動(dòng)過(guò)程比較慢;不能做到根據(jù)需要來(lái)啟動(dòng)服務(wù),比如通常希望插入U(xiǎn)盤的時(shí)候,再啟動(dòng)USB控制的服務(wù),這樣可以更好的節(jié)省系統(tǒng)資源。

為了解決系統(tǒng)服務(wù)的即插即用,UpStart應(yīng)運(yùn)而生,在CentOS6系統(tǒng)中,SysV init和UpStart是并存的,UpStart主要解決了服務(wù)的即插即用。服務(wù)順序啟動(dòng)慢的問(wèn)題,UpStart的解決辦法是把相關(guān)的服務(wù)分組,組內(nèi)的服務(wù)是順序啟動(dòng),組之間是并行啟動(dòng)。在CentOS6系統(tǒng)中,配置文件為/etc/inittab和/etc/init/*.conf。

但是隨著移動(dòng)互聯(lián)網(wǎng)的到來(lái),SysV init服務(wù)啟動(dòng)慢的問(wèn)題顯得越來(lái)越突出,許多移動(dòng)設(shè)備都是基于Linux內(nèi)核,比如安卓。移動(dòng)設(shè)備啟動(dòng)比較頻繁,每次啟動(dòng)都要等待服務(wù)順序啟動(dòng),顯然難以接受,systemd就是為了解決這個(gè)問(wèn)題誕生的。在CentOS7中使用,其配置文件為/usr/lib/systemd/system/ 和 /etc/systemd/system/ 中的文件。
systemd的設(shè)計(jì)思路是:盡可能的快速啟動(dòng)服務(wù);盡可能的減少系統(tǒng)資源占用。

systemd使用

在CentOS7中,systemctl命令主要負(fù)責(zé)控制systemd系統(tǒng)和服務(wù)管理器?;救〈藄ervice和chkconfig命令,雖然service和chkconfig命令依然保留,但是據(jù)說(shuō)已經(jīng)被閹割過(guò)。

參考《Centos7下的systemctl命令與service和chkconfig》,整理常用命令如下:

  • systemctl --version,查看版本。
  • whereis systemctl,查看位置。
  • systemctl list-unit-files,列出所有可用單元(服務(wù))。
  • systemctl list-units,列出所有運(yùn)行中的單元。
  • systemctl --failed,列出所有失敗的單元。
  • systemctl list-unit-files | grep enable,查看自啟動(dòng)的軟件。
  • systemctl is-enabled mysqld.service,查看某個(gè)單元是否開機(jī)啟動(dòng)。
  • systemctl status mysqld.service,查看某個(gè)單元的狀態(tài)。
  • systemctl start mysqld.service,啟動(dòng)某個(gè)單元。
  • systemctl restart mysqld.service,重啟某個(gè)單元。
  • systemctl stop mysqld.service,停止某個(gè)單元。
  • systemctl daemon-reload,修改了某個(gè)單元的配置文件后,重載配置文件。
  • systemctl reload mysqld.service,重載某個(gè)單元。
  • systemctl enable mysqld.service,設(shè)置開機(jī)自啟動(dòng)。
  • systemctl disable mysqld.service,關(guān)閉開機(jī)自啟動(dòng)。
  • systemctl kill mysqld,殺死單元。

nginx

yum安裝nginx

參考《如何在CentOS 7上安裝Nginx》,安裝nginx,安裝成功后使用systemctl命令設(shè)置自啟動(dòng)。

手動(dòng)安裝nginx

參考《Centos7安裝Nginx實(shí)戰(zhàn)》,安裝步驟如下:

1、安裝gcc等編譯環(huán)境
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2、下載nginx1.12.0并解壓
wget http://nginx.org/download/nginx-1.12.0.tar.gz

tar -xzvf nginx-1.12.0.tar.gz

cd nginx-1.12.0

3、創(chuàng)建目錄

mkdir -p /var/temp
mkdir -p /var/temp/nginx
mkdir -p /var/temp/run/nginx
chmod a+wrx -R temp

4、配置編譯選項(xiàng)

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/temp/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

切記,pid-path不能設(shè)置為/var/run/nginx/nginx.pid。因?yàn)镃entOS每次重啟后,都會(huì)刪除/var/run目錄中的自建目錄和文件,從而導(dǎo)致nginx自啟動(dòng)失敗。

5、編譯安裝
make && make install

進(jìn)入/usr/local/nginx查看文件是否存在conf、sbin、html文件夾,若存在則安裝成功

6、測(cè)試啟動(dòng)
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx在啟動(dòng)時(shí)默認(rèn)加載conf/nginx.conf文件。

7、測(cè)試訪問(wèn)
curl localhost

瀏覽器如果不能訪問(wèn),就打開防火墻或者開端口。
關(guān)閉防火墻,systemctl stop firewalld.service
開放端口,firewall-cmd --zone=public --add-port=80/tcp --permanent,firewall-cmd --reload

設(shè)置開機(jī)啟動(dòng)

手動(dòng)安裝的nginx,該怎樣設(shè)置開機(jī)自啟動(dòng)?參照《Nginx+Center OS 7.2 開機(jī)啟動(dòng)設(shè)置(轉(zhuǎn)載)》,步驟如下:

1、在系統(tǒng)服務(wù)目錄里創(chuàng)建nginx.service文件
vi /usr/lib/systemd/system/nginx.service

2、寫入內(nèi)容如下:

[Unit]
Description=nginx
After=network.target
  
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target

[Unit]:服務(wù)的說(shuō)明
Description:描述服務(wù)
After:描述服務(wù)類別
[Service]服務(wù)運(yùn)行參數(shù)的設(shè)置
Type=forking是后臺(tái)運(yùn)行的形式
ExecStart為服務(wù)的具體運(yùn)行命令
ExecReload為重啟命令
ExecStop為停止命令
PrivateTmp=True表示給服務(wù)分配獨(dú)立的臨時(shí)空間
注意:[Service]的啟動(dòng)、重啟、停止命令全部要求使用絕對(duì)路徑
[Install]運(yùn)行級(jí)別下服務(wù)安裝的相關(guān)設(shè)置,可設(shè)置為多用戶,即系統(tǒng)運(yùn)行級(jí)別為3

3、設(shè)置開機(jī)自啟動(dòng)
systemctl enable nginx.service

4、查看nginx狀態(tài)
systemctl status nginx.service
很奇怪,明明啟動(dòng)成功了,為什么顯示Active: inactive (dead)?

5、殺死nginx重啟nginx
pkill -9 nginx

ps aux | grep nginx

systemctl start nginx

再次查看狀態(tài),變成了active,搞定。

6、重啟服務(wù)器
reboot

7、再次連接后,查看服務(wù)狀態(tài)
systemctl status nginx.service

看到nginx已經(jīng)啟動(dòng),至此,nginx自啟動(dòng)配置成功。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容