Linux 初始化系統 SystemV Upstart

System V

特色

缺點:html

  1. 啓動時間長,init是串行啓動,只有前一個進程啓動完,纔會啓動下一個進程
  2. 啓動腳本複雜,init只是執行啓動腳本,無論其餘事情,腳本須要本身處理各類狀況,這每每使得腳本變得很長很複雜

優勢:linux

  1. 概念簡單,只須要編輯腳本
  2. 啓動順序肯定,嚴格按照啓動數字的大小順序執行,一個執行完畢再執行下一個,有益於錯誤排查

文件目錄

/etc/init.d/ubuntu

存放服務啓動腳本bash

對於支持 service 的程序,安裝的時候,會自動的在 /etc/init.d 目錄添加一個配置文件服務器

/etc/inittab網絡

默認運行級別配置文件ionic

Ubuntu18.04已經不存在了ide

/etc/rcN.d工具

存放每一個啓動級別須要啓動的服務rest

運行級別

運行級別 說明
0 關機狀態,系統默認運行級別不能設爲0,不然不能正常啓動
1 單用戶工做狀態,root權限,用於系統維護,禁止遠程登錄
2 字符界面的多用戶模式(不可訪問網絡,沒有NFS))
3 字符界面的完整多用戶模式,大多數服務器主機運行此級別(有NFS)
4 系統未使用,保留
5 圖形界面的多用戶模式,提供了圖形桌面操做環境
6 系統正常關閉並重啓,默認運行級別不能設爲6,不然不能正常啓動

查看運行級別

runlevel

  • 打印以前和當前的運行級別

  • 若是某個運行級別不能肯定用 N 表示

  • 數據經過 utmp 獲取

    啓動過程當中會通知 utmp 當前的運行級別

lfp@legion:~$ runlevel
N 5
# ubuntu 18.04 實際連接到 systemctl
lfp@legion:~$ which runlevel
/sbin/runlevel
lfp@legion:/sbin$ ll
lrwxrwxrwx  1 root root        14 4月  20 22:12 runlevel -> /bin/systemctl*

切換運行級別

init N

N表明運行級別,init 0 關機,init 6重啓

# ubuntu 18.04 連接到 Systemd,支持init命令
lfp@legion:~$ ll /sbin/init
lrwxrwxrwx 1 root root 20 4月  20 22:12 /sbin/init -> /lib/systemd/systemd*

運行級別對應的啓動目錄

# 有7個目錄,對應7個運行級別
# rc,表示run command(運行程序),最後的d表示directory(目錄)
rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rcS.d/

每一個目錄下都是一些符號連接文件,指向/etc/init.d/目錄下的腳本

命名規則爲K+nn+服務名或S+nn+服務名,其中nn爲兩位數字

對於以K (kill)開頭的文件,系統將終止對應的服務
對於以S (start)開頭的文件,系統將啓動對應的服務

nn 表示啓動順序,數字小先執行

啓動目錄下使用符號連接,便於在不一樣的運行級別中統一管理啓動腳本

系統會根據指定的運行級別進入對應的rcN.d目錄,並按照文件名順序檢索目錄下的連接文件

runlevel S並非直接給用戶使用,而是用來爲Single user mode做準備

啓動過程

  1. 執行 /sbin/init程序,啓動init進程(PID=1),是linux的父進程,其餘全部進程都是它的子進程
  2. init 讀取 /etc/inittab文件,獲知設定的運行級別
  3. init 根據運行級別,去對應的/etc/rcN.d目錄,啓動目錄下指定的程序(開機自啓動)

服務管理工具

service, chkconfig

動做 指令
啓動某服務 service httpd start
中止某服務 service httpd stop
重啓某服務 service httpd restart
檢查服務狀態 service httpd status
刪除某服務 chkconfig --del httpd
使服務開機自啓動 chkconfig --level 5 httpd on
使服務開機不自啓動 chkconfig --level 5 httpd off
顯示全部已啓動的服務 chkconfig --list
加入自定義開機自啓服務 chkconfig --add test
查詢某個服務是否開機自啓 chkconfig --list | grep httpd

添加開機啓動服務

添加啓動腳本

  1. /etc/init.d目錄下添加啓動腳本,賦予可執行權限

  2. 在對應運行級別的啓動目錄下建立符號連接,指向/etc/init.d目錄下的啓動腳本

    ln -s /etc/init.d/myservice /etc/rc5.d/S99myservice

    或者

    執行 chkconfig --add xxx

設置MySQL開機自啓動

配置 rc.local

Upstart

Ubuntu 15.04 以前默認使用 Upstart,以後使用 Systemd,沒有深刻了解

Project is in maintaince mode only. No new features are being developed and the general advice would be to move over to another minimal init system or Systemd.

簡介

採用事件驅動模型,UpStart 能夠:

  • 更快地啓動系統(有依賴關係的服務仍是必須前後啓動)
  • 當新硬件被發現時動態啓動服務
  • 硬件被拔除時動態中止服務

目錄

配置文件地址/etc/init

https://askubuntu.com/a/5042

參考

https://www.ibm.com/developerworks/cn/linux/1407_liuming_init2/index.html?ca=drs-

相關文章
相關標籤/搜索