systemd FAQ
関連記事
目次
- 1 FAQ
- 1.1 どうしてログメッセージがコンソールに表示されるのですか?
- 1.2 デフォルトで動作する getty の数を修正するにはどうすればいいですか?
- 1.3 起動中の出力をもっと詳細に表示するにはどうすればいいですか?
- 1.4 起動後にコンソールが消されるのを止めるにはどうすればいいですか?
- 1.5 公式の Arch カーネルを使わない場合どのカーネルオプションを有効にする必要がありますか?
- 1.6 あるユニットが依存している他のユニットを調べるにはどうすればいいですか?
- 1.7 コンピューターをシャットダウンにしたのに、電源が落ちません
- 1.8 ブートプロセスの間にスクリプトを起動するにはどうすればいいですか?
- 1.9 .service の状態が緑の "active (exited)" (例: iptables)
- 1.10 既存のシンボリックリンクのためにユニットを有効にすることができない
FAQ
既知の問題の最新のリストについては、アップストリームの TODO を調べて下さい。
どうしてログメッセージがコンソールに表示されるのですか?
カーネルの loglevel はあなた自身の手で設定してください。歴史的に、/etc/rc.sysinit
がこれを行って dmesg のログレベルを 3
(適度に quiet なログレベル) に設定していました。loglevel=3
か quiet
のどちらかをカーネルパラメータに追加してください。
デフォルトで動作する getty の数を修正するにはどうすればいいですか?
getty を追加するには、/etc/systemd/system/getty.target.wants/
ディレクトリに getty をインスタンス生成するシンボリックリンクを作ってください:
# ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service # systemctl start getty@tty9.service
getty を削除するには、/etc/systemd/system/getty.target.wants/
ディレクトリから削除したい getty のシンボリックリンクを削除してください:
# rm /etc/systemd/system/getty.target.wants/getty@{tty5,tty6}.service # systemctl stop getty@tty5.service getty@tty6.service
systemd は /etc/inittab
ファイルを使いません。
/etc/systemd/logind.conf
を編集して NAutoVTs
の値を変更することで自動で生成させる getty の数を変更することもできます。このようにすれば、必要なときに生成されるのは変わらずに、上の方法で起動時に実行する getty を指定できます。
起動中の出力をもっと詳細に表示するにはどうすればいいですか?
initram のメッセージの後、コンソールに何も表示されない場合、kernel 行に quiet
パラメータが設定されているのが原因です。パラメータを削除すれば、少なくとも最初に systemd で起動した時、全てが ok かどうか見ることができます。そして、緑の [ OK ]
か赤の [ FAILED ]
のリストが表示されます。
全てのメッセージはシステムログに保存されるので、システムの状態を知りたいときは systemctl
を実行 (root 権限は必要ありません) するか journalctl
を使ってブート・システムログを見て下さい。
起動後にコンソールが消されるのを止めるにはどうすればいいですか?
/etc/systemd/system/getty@.service.d
という名前のディレクトリを作成してその中に nodisallocate.conf
を配置して TTYVTDisallocate
オプションを no
に上書きしてください。
/etc/systemd/system/getty@.service.d/nodisallocate.conf
[Service] TTYVTDisallocate=no
公式の Arch カーネルを使わない場合どのカーネルオプションを有効にする必要がありますか?
2.6.39 以前のカーネルはサポートされていません。
以下は必須・推奨オプションのリストの一部です、全てではありません:
General setup CONFIG_FHANDLE=y CONFIG_AUDIT=y (推奨) CONFIG_AUDIT_LOGINUID_IMMUTABLE=y (not required, may break sysvinit compatibility) CONFIG_CGROUPS=y -> Namespaces support CONFIG_NET_NS=y (for private network) Networking support -> Networking options CONFIG_IPV6=[y|m] (強く推奨) Device Drivers -> Generic Driver Options CONFIG_UEVENT_HELPER_PATH="" CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y (必須、initramfs を使わない場合) -> Real Time Clock CONFIG_RTC_DRV_CMOS=y (強く推奨) File systems CONFIG_FANOTIFY=y (readahead に必須) CONFIG_AUTOFS4_FS=[y|m] -> Pseudo filesystems CONFIG_TMPFS_POSIX_ACL=y (推奨、pam_systemd.so を使う場合)
あるユニットが依存している他のユニットを調べるにはどうすればいいですか?
例えば、multi-user.target
のようなターゲットがどのサービスを使っているか調べたい時は、次のようなコマンドを使って下さい:
$ systemctl show -p "Wants" multi-user.target
Wants=rc-local.service avahi-daemon.service rpcbind.service NetworkManager.service acpid.service dbus.service atd.service crond.service auditd.service ntpd.service udisks.service bluetooth.service org.cups.cupsd.service wpa_supplicant.service getty.target modem-manager.service portreserve.service abrtd.service yum-updatesd.service upowerd.service test-first.service pcscd.service rsyslog.service haldaemon.service remote-fs.target plymouth-quit.service systemd-update-utmp-runlevel.service sendmail.service lvm2-monitor.service cpuspeed.service udev-post.service mdmonitor.service iscsid.service livesys.service livesys-late.service irqbalance.service iscsi.service
Wants
の代わりにそれぞれの依存関係のタイプによって WantedBy
, Requires
, RequiredBy
, Conflicts
, ConflictedBy
, Before
, After
を使うこともできます。
コンピューターをシャットダウンにしたのに、電源が落ちません
systemctl halt
ではなく次のコマンドを使って下さい:
$ systemctl poweroff
ブートプロセスの間にスクリプトを起動するにはどうすればいいですか?
/etc/systemd/system/myscript.service
とのように新しいファイル を作成して以下の内容を追加してください:
[Unit] Description=My script [Service] ExecStart=/usr/bin/my-script [Install] WantedBy=multi-user.target
この例では multi-user ターゲットが起動した時にあなたのスクリプトを実行します。スクリプトには実行可能属性が付与されているようにしてください。
myscript.service を有効化すると次回起動時からは起動時に実行されます。
.service の状態が緑の "active (exited)" (例: iptables)
これはおかしなことでは全くありません。iptables の場合、実行するデーモンがなくカーネル内でコントロールされるためです。従って、ルールがロードされた後 iptables は終了します。
iptables のルールが正しくロードされたか確認するには:
# iptables --list
既存のシンボリックリンクのためにユニットを有効にすることができない
ユニットを 有効化 しようとすると、次のようなエラーが発生することがあります。
Failed to enable unit: File /etc/systemd/system/symlink already exists and is a symlink to file.
ユニットを有効にして作成された symlink
が既に /etc/systemd/system/
に存在する場合に発生する可能性があります。これは通常、あるディスプレイマネージャから別のディスプレイに切り替えたとき (例えば GDM から SDDM へ、それぞれ gdm.service
と sddm.service
で有効にできる)、対応するシンボリックリンク /etc/systemd/system/display-manager.service
が既に存在するときに起こります。
この問題を解決するには、まず関連するディスプレイマネージャを無効にしてから新しいものを有効にするか、新しいものを有効にするときに -f
/--force
オプションを使って既存の競合するシンボリックリンクを上書きします (systemctl(1) § OPTIONS による)