読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】古いサーバーで「ランレベル3」って言われた。SysVinit のランレベル、/etc/inittab・telinit・/etc/init.d と rc の番号【LPICレベル1】

20レスカテゴリ:Linux
1: 名無しさん

古いサーバーの手順書に「ランレベル3で起動」「/etc/init.d/httpd restart」って書いてある
今の systemctl と何が違うん?

2: 名無しさん

前提のおさらい。起動の最後に、カーネルが最初のプロセス init を動かして、init がサービスを順に起動する。init には SysVinit・Upstart・systemd がある

3: 名無しさん

>>1
SysVinit では、どのサービスを動かすかの組み合わせを0〜6のランレベルで表す

4: 名無しさん

>>3
よく問われるもの
0:停止
1(S):シングルユーザー(保守用、root だけ、ネットワークなし)
2〜5:マルチユーザー
6:再起動

5: 名無しさん

>>4
2〜5の使い分けは?

6: 名無しさん

>>5
ディストリビューションで違う。Red Hat 系は3がテキストのマルチユーザー、5がグラフィカル。Debian は2〜5が既定では同じ中身。試験では Red Hat 系の3と5がよく出る

7: 名無しさん

>>3
起動したときのランレベルはどこで決めるん?

8: 名無しさん

>>7
/etc/inittab の initdefault の行。1行は id:ランレベル:動作:プロセス の形で、既定を3にするなら id:3:initdefault:

9: 名無しさん

>>8
sysvinit の inittab の man の例には、ほかに si::sysinit:/etc/init.d/rcS(起動時の初期化)、l3:3:wait:/etc/init.d/rc 3(ランレベル3に入ったら rc を動かす)、ca::ctrlaltdel:/sbin/shutdown -t1 -h now(Ctrl+Alt+Del のとき)みたいな行がある。respawn は終わったらまた起動(getty など)

10: 名無しさん

>>3
今のランレベルを見たり変えたりするのは?

11: 名無しさん

>>10
runlevel で「前 今」が出る(N 3 なら前はなしで今は3)。変えるのは telinit 1 か init 1。telinit q で inittab を読み直す

12: 名無しさん

>>11
ランレベルを変えると、新しいランレベルで要らないプロセスは、まず SIGTERM、それでも残れば SIGKILL で止められる(inittab の man)

13: 名無しさん

>>1
/etc/init.d/httpd restart は?

14: 名無しさん

>>13
/etc/init.d/ の下にサービスごとのスクリプトがあって、start・stop・restart・status を引数に取る。service httpd restart も同じことをする

15: 名無しさん

>>14
ランレベルごとに /etc/rc0.d 〜 /etc/rc6.d(Red Hat 系は /etc/rc.d/rc3.d など)があって、中は /etc/init.d/ へのシンボリックリンク。S で始まるものが start、K で始まるものが stop で呼ばれて、数字の順に動く
Debian 13 の /etc/rc2.d にも S01dbus -> ../init.d/dbus があった。スクリプトの先頭の Default-Start: 2 3 4 5 がリンクを作る目安

16: 名無しさん

>>2
Upstart は?

17: 名無しさん

>>16
イベントで起動する仕組みで、昔の Ubuntu などで使われてた。設定は /etc/init/ の .conf、操作は initctl。今は systemd に置き換わってる

18: 名無しさん

>>2
systemd ではランレベルはどうなったん?

19: 名無しさん

>>18
ターゲットが代わりをしてる。Debian 13 の systemd には runlevel3.target -> multi-user.target、runlevel5.target -> graphical.target のような別名のリンクが入ってた。0 は poweroff、1 は rescue、6 は reboot

20: 名無しさん

>>15
0停止・1シングル・6再起動、既定は inittab の initdefault、変えるのは telinit、サービスは /etc/init.d と rc の S と K。systemd ではターゲットに読み替える

管理人のひとこと