[Linux運維] 基本服務rc

[Linux運維] 基本服務rc

rc = 'run command',執行命令,一般linux啓動的時候,/etc/rc是linux啓動的主腳本,而.bashrc是當Linux的bash shell啓動後所運行的腳本。今天咱們來看一看/etc/rc下面是什麼東西,也就是linux啓動的時候都幹了什麼。php

1. redhat 啓動過程

  • 加載BIOS
  • 讀取MBR
  • Boot loader
  • 加載內核
  • 執行init程序,/sbin/init,pid爲1的進程
  • 肯定運行等級,根據/etc/inittab
  • 執行/etc/rc.d/rc.sysinit,這是init進程執行的第一個腳本,內容不少,能夠參考 參考1的內容。
  • 啓動內核模塊, 具體是依據/etc/modules.conf文件或/etc/modules.d目錄下的文件來裝載內核模塊
  • 運行不一樣等級的啓動腳本 /etc/rc0.d/ -- /etc/rc6.d/
  • 執行/etc/rc.d/rc.local的腳本
  • 執行login程序,進入登錄狀態

2. 運行等級

linux有7個運行等級,具體以下:html

0 Halt: Shuts down the system.
1 Single-user mode: Mode for administrative tasks.
2 Multiuser mode: Does not configure network interfaces and does not export networks services.
3 Multiuser mode with networking: Starts the system normally.
4 Not used/user-definable For special purposes.
5 Start the system normally with appropriate display manager (with GUI) Same as runlevel 3 + display manager.
6 Reboot Reboots the system.node

(1) /etc/inittab

系統初始化運行等級的時候,就是讀的這個文件linux

$ cat /etc/inittab 
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

這個文件裏面也有相應的運行等級的介紹,咱們主要關注 id:3:initdefault:,這個就是上面說到的肯定運行等級,就是看這個這裏。ios

(2)看當前的runlevel

$ /sbin/runlevel 
N 3

runlevel - output previous and current runlevelshell

(3) 切換runlevel

$ telinit N

telinit - change system runlevelbash

3. rcN.d/ 介紹

init 程序會根據runlevel去執行 相應rcN.d(0 <= N <= 6) 目錄下面的內容。通常runlevel 3是最經常使用的。app

$ ls -l rc*.d
lrwxrwxrwx   1 root root   10 Nov  3  2014 rc0.d -> rc.d/rc0.d
lrwxrwxrwx   1 root root   10 Nov  3  2014 rc1.d -> rc.d/rc1.d
lrwxrwxrwx   1 root root   10 Nov  3  2014 rc2.d -> rc.d/rc2.d
lrwxrwxrwx   1 root root   10 Nov  3  2014 rc3.d -> rc.d/rc3.d
lrwxrwxrwx   1 root root   10 Nov  3  2014 rc4.d -> rc.d/rc4.d
lrwxrwxrwx   1 root root   10 Nov  3  2014 rc5.d -> rc.d/rc5.d
lrwxrwxrwx   1 root root   10 Nov  3  2014 rc6.d -> rc.d/rc6.d

咱們看到/etc/rcN.d 都是軟鏈到/etc/rc.d/rcN.d下面的。運維

簡單看一下里面的內容ssh

$ ls /etc/rc.d/rc0.d/
K01gshelld       K04salt-minion  K15collectd      K16php-fpm  K50netconsole        K73winbind     K75netfs        K87rpcbind      K89rdisc      K99salt-syndic
K01nagios        K05salt-master  K15htcacheclean  K25sshd     K50vsftpd            K74lm_sensors  K75ntpdate      K88auditd       K90network    K99sysstat
K01node_service  K10saslauthd    K15httpd         K30nrpe     K60crond             K74nscd        K75udev-post    K88rsyslog      K92ip6tables  S00killall
K01tbscand       K10tornado      K15svnserve      K30postfix  K70yum-updateonboot  K74ntpd        K87restorecond  K89portreserve  K92iptables   S01halt

其中 S表示start的時候運行的命令,K表示shutdown的時候運行的命令,數字表示優先級,數字小的先執行

4. /etc/rc.local

Redhat中的運行模式二、三、5都把/etc/rc.d/rc.local作爲初始化腳本中的最後一個,因此用戶能夠本身在這個文件中添加一些須要在其餘初始化工做以後,登陸以前執行的命令。好比開機自啓動的東西,固然這裏,最好使用nohup &,防止卡主。

5. 設置服務的開機自啓動 -- chkconfig

(1)chkconfig

chkconfig命令主要用來更新(啓動或中止)和查詢系統服務的運行級信息。謹記chkconfig不是當即自動禁止或激活一個服務,它只是簡單的改變了符號鏈接。

chkconfig --list [name]:顯示全部運行級系統服務的運行狀態信息(on或off)。若是指定了name,那麼只顯示指定的服務在不一樣運行級的狀態。
chkconfig --add name:增長一項新的服務。chkconfig確保每一個運行級有一項啓動(S)或者殺死(K)入口。若有缺乏,則會從缺省的init腳本自動創建。
chkconfig --del name:刪除服務,並把相關符號鏈接從/etc/rc[0-6].d刪除。
chkconfig [--level levels] name:設置某一服務在指定的運行級是被啓動,中止仍是重置。

(2) 怎樣使用chkconfig 添加服務

條件是:

a) 服務腳本必須存放在/etc/ini.d/目錄下;

b) 服務腳本里面要有這兩行

# chkconfig: 2345 20 80
# description: XXXXX

上面的第一行裏面,2345是運行等級,20是啓動優先級,80是中止優先級,這是chkconfig添加或者修改服務的時候須要的。

(3) demo

$ cat /etc/init.d/hello 
#! /bin/bash

# chkconfig: 2345 20 80
# description: Just test for chkconfig

echo "hello world"
  • 添加服務
$ chkconfig --add hello

$ chkconfig --list | grep hello
hello           0:off   1:off   2:on    3:on    4:on    5:on    6:off

咱們如今看一下rc.d目錄下面的狀況:

$ find rc.d/ -name '*hello' | xargs ls -lh
-rwxr-xr-x 1 root root 97 Sep  3 23:55 rc.d/init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 rc.d/rc0.d/K80hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 rc.d/rc1.d/K80hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 rc.d/rc2.d/S20hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 rc.d/rc3.d/S20hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 rc.d/rc4.d/S20hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 rc.d/rc5.d/S20hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 rc.d/rc6.d/K80hello -> ../init.d/hello

咱們看到如今在rc2-5.d/的目錄下面多一個S20hello的軟鏈,其餘等級下面有K80hello的軟鏈。

  • 修改hello的啓動等級
$ chkconfig --level 23 hello off

$ chkconfig --list | grep hello
hello           0:off   1:off   2:off   3:off   4:on    5:on    6:off

# find /etc/rc.d/ -name '*hello' | xargs ls -lh
-rwxr-xr-x 1 root root 97 Sep  3 23:55 /etc/rc.d/init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 /etc/rc.d/rc0.d/K80hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 /etc/rc.d/rc1.d/K80hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  4 12:12 /etc/rc.d/rc2.d/K80hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  4 12:12 /etc/rc.d/rc3.d/K80hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 /etc/rc.d/rc4.d/S20hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 /etc/rc.d/rc5.d/S20hello -> ../init.d/hello
lrwxrwxrwx 1 root root 15 Sep  3 23:55 /etc/rc.d/rc6.d/K80hello -> ../init.d/hello

咱們看到等級2,3變成了K80hello,而原先的S20hello消失了。

6. 參考:

(1)http://comptechdoc.org/os/linux/startupman/linux_surcsysinit.html
(2)http://www.xshell.net/linux/inittab_rc.html

相關文章
相關標籤/搜索