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

【疑問】systemctl の start と enable、何が違うん?ターゲットとシャットダウンも【LPICレベル1】

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

Webサーバーを入れて systemctl start nginx したら動いた
でも再起動したら止まってた。start したのに、なんで

2: 名無しさん

>>1
start は「今すぐ起動する」だけ。次に起動したときにも自動で立ち上げるには enable が要る
systemctl enable nginx で自動起動の設定、systemctl enable --now nginx で設定と起動を一度にやる

3: 名無しさん

>>2
逆は stop と disable か

4: 名無しさん

>>3
そう。stop は今止める、disable は自動起動をやめる。設定を変えたあとに止めて起動し直すなら restart
状態の確認は systemctl status nginx。動いてるか、自動起動が有効かは is-active、is-enabled でも見られる

5: 名無しさん

systemctl が操作してる「ユニット」って何

6: 名無しさん

>>5
systemd が管理する単位のこと。種類は名前の最後で分かる
.service(サービス)、.timer(決まった時刻の実行)、.mount(マウント)、.target(ユニットのまとまり)など

7: 名無しさん

>>6
ユニットのファイルはどこにあるん

8: 名無しさん

>>7
パッケージが入れるものは /usr/lib/systemd/system/、管理者が置くものや上書きは /etc/systemd/system/
同じ名前なら /etc 側が優先される。パッケージのファイルを直接書き換えると、更新で消えることがある

9: 名無しさん

>>7
enable したら何が起きてるん

10: 名無しさん

>>9
ユニットファイルの中の WantedBy= に書かれたターゲットから、そのユニットへのシンボリックリンクが /etc/systemd/system/ の下に作られる
起動時にそのターゲットが立ち上がると、つながったユニットも起動される

11: 名無しさん

ターゲットって、ランレベルのこと?

12: 名無しさん

>>11
役割は近い。昔の SysVinit のランレベルは、systemd ではターゲットに対応づけられてる

13: 名無しさん

>>12
起動したときのターゲットはどう変えるん

14: 名無しさん

>>13
今の設定は systemctl get-default、変えるのは systemctl set-default multi-user.target
今すぐ切り替えるなら systemctl isolate multi-user.target。メンテナンス用の1人だけのモードなら rescue.target

15: 名無しさん

>>14
isolate って危なくないん?

16: 名無しさん

>>15
危ないこともある。指定したターゲットに要らないユニットは止められるから、リモートで rescue.target にすると、SSH が切れて戻れなくなる
切り替える前に、誰が使ってるかと、手元で操作できるかを確かめる

17: 名無しさん

シャットダウンは systemctl poweroff でええの?

18: 名無しさん

>>17
それでも止まる。試験でよく聞かれるのは shutdown コマンドの書き方
shutdown -h now(今すぐ停止)、shutdown -r +10 "メンテナンスします"(10分後に再起動、ログイン中の人にメッセージ)、shutdown -c(予約の取り消し)

19: 名無しさん

>>18
いや、今どきのサーバーは1人で使ってることも多いし、メッセージまで送る必要ある?

20: 名無しさん

>>19
1人なら要らん場面もある。でも共用のサーバーで突然止めると、作業中のファイルが壊れることがある
予告するコマンドとして wall(全員の端末にメッセージを送る)も範囲に入ってる

21: 名無しさん

>>1
init とか telinit はもう使わんの?

22: 名無しさん

>>21
SysVinit の系統のコマンドで、/etc/inittab に既定のランレベルを書いてた
systemd の環境でも、互換のために telinit 3 などが受け付けられることが多い。試験では両方の書き方が出る

管理人のひとこと