1. 程式人生 > >使用systemctl設定Nginx、PHP、Mysql開機啟動

使用systemctl設定Nginx、PHP、Mysql開機啟動

        CentOS 7繼承了RHEL 7的新的特性,例如強大的systemctl,而systemctl的使用也使得以往系統服務的/etc/init.d的啟動指令碼的方式就此改變,也大幅提高了系統服務的執行效率。但服務的配置和以往也發生了極大的不同,說實在的,變的簡單而易用了許多。

        CentOS 7的服務systemctl指令碼存放在:/usr/lib/systemd/,有系統(system)和使用者(user)之分,像需要開機不登陸就能執行的程式,最好還是存在系統服務裡面,即:/usr/lib/systemd/system目錄下,每一個服務以.service結尾,一般會分為3部分:[Unit]、[Service]和[Install]。

        我們可以使用systemctl -a來檢視所有服務,如果列表裡面沒有Nginx,PHP、Mysql,又想借助於systemctl來進行統一管理的話,就到上述所說的/usr/lib/systemd/system目錄下面建立以下檔案吧。

Nginx之nginx.service檔案[自定義]

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

PHP之php.service檔案[自定義]

[Unit]
Description=php
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
ExecStop=/bin/pkill -9 php-fpm
PrivateTmp=true
[Install]
WantedBy=multi-user.target

Mysql之mysqld.service檔案[安裝的時候軟體自動生成]

[Unit]
Description=MySQL Community ServerAfter=network.target
After=syslog.target
[Install]
WantedBy=multi-user.targetAlias=mysql.service
[Service]
User=mysql
Group=mysql
#systemctl status就是根據pid來判斷服務的執行狀態的
PIDFile=/var/run/mysqld/mysqld.pid
# 以root許可權來啟動程式
PermissionsStartOnly=true
# 設定程式啟動前的必要操作。例如初始化相關目錄等等
ExecStartPre=/usr/bin/mysql-systemd-start pre
# 啟動服務
ExecStart=/usr/bin/mysqld_safe
# Don't signal startup success before a ping works
ExecStartPost=/usr/bin/mysql-systemd-start post
# Give up if ping don't get an answer
TimeoutSec=600
#Restart配置可以在程序被kill掉之後,讓systemctl產生新的程序,避免服務掛掉
Restart=always
PrivateTmp=false

上述檔案建立完成後,只要使用systemctl enable 命令就可以將所編寫的服務新增至開機啟動了。例如:

#將php服務新增至開機啟動。執行enable命令後,會自動建立一個軟連結/etc/systemd/system/multi-user.target.wants/php.service指向此檔案。
systemctl enable php.service
#檢視php是否已設定為開機啟動
systemctl is-enabled php.service

注意

[Unit]部分主要是對這個服務的說明,內容包括Description和After,Description用於描述服務,After用於描述服務類別

[Service]部分是服務的關鍵,是服務的一些具體執行引數的設定,這裡 Type=forking是後臺執行的形式,PIDFile為存放PID的檔案路徑,

ExecStart為服務的具體執行命令,ExecReload為重啟命令,ExecStop為停止命令,PrivateTmp=True表示給服務分配獨立的臨時空間。[Service]部分的啟動、重啟、停止命令全部要求使用絕對路徑,使用相對路徑則會報錯!

[Install]部分是服務安裝的相關設定,可設定為多使用者的

服務指令碼按照上面編寫完成後,以754的許可權儲存在/usr/lib/systemd/system目錄下,這時就可以利用systemctl進行配置了~

使用systemctl start [服務名(也是檔名)]可以測試服務是否可以成功執行,如果不能執行則可以使用systemctl status [服務名(也是檔名)]檢視錯誤資訊和其他服務資訊。然後根據報錯進行修改,直到可以start,如果不放心還可以測試restart和stop命令。

:如果發現還是不能start,那麼有可能是你先前啟動了服務卻未關閉導致,要按照原來的方法先關閉服務,再使用systemctl start,我就是遇到了這種情況,折騰了幾分鐘都報錯才想到了這一點/(ㄒoㄒ)/~~

原文連結:使用systemctl設定Nginx、PHP、Mysql開機啟動