KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Linuc 101 Linux systemd - sytemctl コマンド、target, isolate reboot, shutdown -10,

systemd

systemd とは

システム D

www.freedesktop.org

www.designet.co.jp

コンピューターが起動するときに、必要な様々なプログラムを並列して動かすプログラム。

PID ( Process ID ) が 1 である原初のプロセス。

カーネルの次に起動する。

sysVinit と違って シェルスクリプトを使わない。

Service, Socket, Mount, Target, などの unit によって管理する。

equj65.net

これらは拡張子にもなっているらしい。

Target は sysinit, basic, multi-user, graphical, の順番で動く。

Cgroup ( Control Group ) を使っている

ls -l /sbin/init
lrwxrwxrwx 1 root root 20 Jul  7  2020 /sbin/init
 -> /lib/systemd/systemd

最初のプロセスである init プロセスの位置にデフォルトでシンボリックリンクがある。

つまり init として systemd はうごく!!!

systemctl とは

SYSTEM ConTroL の略かな?

milestone-of-se.nesuke.com

systemd をターミナルで動かすためのコマンド。

サービスやターゲットなどのユニットを表示したり変更したりできる。

サービスとは

linux.k-sakabe.com

サービスとはコンピュータが開いてから閉じるまで裏で動き続けるプログラムで

別名を デーモン ( Daemon ) というらしい

ターゲットと管理

equj65.net

ターゲットとは、複数のユニットを機能ごとにグルーピングしているものらしい

デフォルトターゲットの表示と変更

systemctl get-default でデフォルトのターゲットを表示し

systemctl set-default your-target で デフォルトを your ターゲットに変更できる

実例

root@DESKTOP-8G3A2F8:~# systemctl get-default
graphical.target
root@DESKTOP-8G3A2F8:~# \
systemctl set-default multi-user.target
Created symlink /etc/systemd/system/default.target → 
/lib/systemd/system/multi-user.target.

現在のデフォルトになっている graphical.target を表示し

システム D の sytem/ の default.target に multi-user.target へのリンクが追加された

isolate - 稼働状態のままターゲット変更

systemctl isolate your-target で稼働状態のままターゲットを your ターゲットに変更できる

普通に変更すると一度落ちるのかな?要検証

また poweroff.target, reboot.target, を指定して isolate で動かすことで

電源オフや再起動ができる。

systemctl isolate reboot.target
System has not been booted with systemd as init system (PID 1). 
Can't operate.
Failed to connect to bus: Host is down

実際に isolate で reboot を売ってみたが、 WSL だからか systemd が PID 1 になっていなくて打てなかった。

なお poweroffreboot と直接打ち込んでも実行される

shutdown

shutdown +10 で 10min, shutdown +0 で即時 シャットダウンされる。

shutdown -r で reboot される

これも WSL では上記のエラーがでて実行できない。

centos での実例

qiita.com

centos 6 では init プロセスの 3 か 5 で CUI モードか GUI モードを決定するが

centos 7 では systemd が動いているので、multi-user.target か graphical.target に切り替える