centos 7.x編寫開機啟動服務

JamCurnow 8年前發布 | 43K 次閱讀 Nginx Systemd CentOS

來自: http://www.dohooe.com/2016/03/03/352.html

centos 7以上是用Systemd進行系統初始化的,Systemd 是 Linux 系統中最新的初始化系統(init),它主要的設計目標是克服 sysvinit 固有的缺點,提高系統的啟動速度。關于Systemd的詳情介紹在 這里

Systemd服務文件以.service結尾,比如現在要建立nginx為開機啟動,如果用yum install命令安裝的,yum命令會自動創建nginx.service文件,直接用命令

systemcel enable nginx.service
systemcelenablenginx.service

設置開機啟動即可。

在這里我是用源碼編譯安裝的,所以要手動創建nginx.service服務文件。

開機沒有登陸情況下就能運行的程序,存在系統服務(system)里,即:

/lib/systemd/system/
/lib/systemd/system/

1.在系統服務目錄里創建nginx.service文件

vim /lib/systemd/system/nginx.service
vim /lib/systemd/system/nginx.service

內容如下

[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] 
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]:服務的說明

Description:描述服務

After:描述服務類別

[Service]服務運行參數的設置

Type=forking是后臺運行的形式

ExecStart為服務的具體運行命令

ExecReload為重啟命令

ExecStop為停止命令

PrivateTmp=True表示給服務分配獨立的臨時空間

注意:[Service]的啟動、重啟、停止命令全部要求使用絕對路徑

[Install]運行級別下服務安裝的相關設置,可設置為多用戶,即系統運行級別為3

保存退出。

2.設置開機啟動

systemctl enable nginx.service
systemctlenablenginx.service

3.其它命令

啟動nginx服務

systemctl start nginx.service
systemctlstartnginx.service

設置開機自啟動

systemctl enable nginx.service
systemctlenablenginx.service

停止開機自啟動

systemctl disable nginx.service
systemctldisablenginx.service

查看服務當前狀態

systemctl status nginx.service
systemctlstatusnginx.service

重新啟動服務

systemctl restart nginx.service
systemctlrestartnginx.service

查看所有已啟動的服務

systemctl list-units --type=service
systemctllist-units --type=service

4.Systemd 命令和 sysvinit 命令的對照表

Sysvinit 命令 Systemd 命令 備注
service foo start systemctl start foo.service 用來啟動一個服務 (并不會重啟現有的)
service foo stop systemctl stop foo.service 用來停止一個服務 (并不會重啟現有的)。
service foo restart systemctl restart foo.service 用來停止并啟動一個服務。
service foo reload systemctl reload foo.service 當支持時,重新裝載配置文件而不中斷等待操作。
service foo condrestart systemctl condrestart foo.service 如果服務正在運行那么重啟它。
service foo status systemctl status foo.service 匯報服務是否正在運行。
ls /etc/rc.d/init.d/ systemctl list-unit-files –type=service 用來列出可以啟動或停止的服務列表。
chkconfig foo on systemctl enable foo.service 在下次啟動時或滿足其他觸發條件時設置服務為啟用
chkconfig foo off systemctl disable foo.service 在下次啟動時或滿足其他觸發條件時設置服務為禁用
chkconfig foo systemctl is-enabled foo.service 用來檢查一個服務在當前環境下被配置為啟用還是禁用。
chkconfig –list systemctl list-unit-files –type=service 輸出在各個運行級別下服務的啟用和禁用情況
chkconfig foo –list ls /etc/systemd/system/*.wants/foo.service 用來列出該服務在哪些運行級別下啟用和禁用。
chkconfig foo –add systemctl daemon-reload 當您創建新服務文件或者變更設置時使用。
telinit 3 systemctl isolate multi-user.target (OR systemctl isolate runlevel3.target OR telinit 3) 改變至多用戶運行級別。

5.Sysvinit 運行級別和 systemd 目標的對應表

<th width="53%">Systemd 目標</th>

<th width="26%">備注</th>

</tr>

</thead>

<td>runlevel0.target, poweroff.target</td>

<td>關閉系統。</td>

</tr>

</tbody>

</table> </div>

 本文由用戶 JamCurnow 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
Sysvinit 運行級別
0
1, s, single runlevel1.target, rescue.target 單用戶模式。
2, 4 runlevel2.target, runlevel4.target, multi-user.target 用戶定義/域特定運行級別。默認等同于 3。
3 runlevel3.target, multi-user.target 多用戶,非圖形化。用戶可以通過多個控制臺或網絡登錄。
5 runlevel5.target, graphical.target 多用戶,圖形化。通常為所有運行級別 3 的服務外加圖形化登錄。
6 runlevel6.target, reboot.target 重啟
emergency emergency.target 緊急 Shell
  • sesese色