「Systemd FAQ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「http://cgit.freedesktop.org/」を「https://cgit.freedesktop.org/」に置換)
(英語版に追従)
3行目: 3行目:
 
[[Category:ブートプロセス]]
 
[[Category:ブートプロセス]]
 
[[en:Systemd FAQ]]
 
[[en:Systemd FAQ]]
[[es:Systemd FAQ]]
+
[[es:Systemd (Español)/FAQ]]
[[it:Systemd FAQ]]
+
[[it:Systemd (Italiano)/FAQ]]
[[zh-hans:Systemd FAQ]]
+
[[zh-hans:Systemd (简体中文)/FAQ]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|systemd}}
 
{{Related|systemd}}
 
{{Related|systemd/ユーザー}}
 
{{Related|systemd/ユーザー}}
{{Related|デーモン#デーモン一覧}}
+
{{Related|デーモン}}
 
{{Related articles end}}
 
{{Related articles end}}
 
== FAQ ==
 
== FAQ ==
101行目: 101行目:
 
=== ブートプロセスの間にスクリプトを起動するにはどうすればいいですか? ===
 
=== ブートプロセスの間にスクリプトを起動するにはどうすればいいですか? ===
   
{{ic|/etc/systemd/system}} に新しいファイル (例: ''myscript''.service) を作成して以下の内容を追加してください:
+
{{ic|/etc/systemd/system/''myscript''.service}} とのように新しいファイル を作成して以下の内容を追加してください:
   
 
[Unit]
 
[Unit]
112行目: 112行目:
 
WantedBy=multi-user.target
 
WantedBy=multi-user.target
   
次に:
 
   
  +
この例では multi-user ターゲットが起動した時にあなたのスクリプトを実行します。スクリプトには[[ヘルプ:読み方#実行可能属性の付与|実行可能属性が付与]]されているようにしてください。
# systemctl enable ''myscript''.service
 
   
  +
''myscript.service'' を[[有効化]]すると次回起動時からは起動時に実行されます。
この例では multi-user ターゲットが起動した時にあなたのスクリプトを実行します。また、まだスクリプトに実行可能権限を与えてない場合は chmod 755 を使って権限を与えて下さい。
 
   
 
{{Note|1=シェルスクリプトを起動したい場合は、スクリプトの最初の行に shebang を置くようにしてください: {{ic|#!/bin/sh}}。次のように書いても機能しません: {{ic|1=ExecStart=/bin/sh /path/to/script.sh # DOES NOT WORK}}。}}
 
{{Note|1=シェルスクリプトを起動したい場合は、スクリプトの最初の行に shebang を置くようにしてください: {{ic|#!/bin/sh}}。次のように書いても機能しません: {{ic|1=ExecStart=/bin/sh /path/to/script.sh # DOES NOT WORK}}。}}

2020年6月28日 (日) 10:39時点における版

関連記事

FAQ

既知の問題の最新のリストについては、アップストリームの TODO を調べて下さい。

どうしてログメッセージがコンソールに表示されるのですか?

カーネルの loglevel はあなた自身の手で設定してください。歴史的に、/etc/rc.sysinit がこれを行って dmesg のログレベルを 3 (適度に quiet なログレベル) に設定していました。loglevel=3quiet のどちらかをカーネルパラメータに追加してください。

デフォルトで動作する 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 ファイルを使いません。

ノート: systemd 30 では、デフォルトで getty はひとつだけ起動します。他の tty に切り替えた場合、そこに getty が起動します (socket-activation style)。上の方法を使って agetty プロセスの追加を強制することは可能です。

/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

systemd に移行した後、fakeRAID がマウントされません

次を使っているか確認してください:

# systemctl enable dmraid.service

ブートプロセスの間にスクリプトを起動するにはどうすればいいですか?

/etc/systemd/system/myscript.service とのように新しいファイル を作成して以下の内容を追加してください:

[Unit]
Description=My script

[Service]
ExecStart=/usr/bin/my-script

[Install]
WantedBy=multi-user.target 


この例では multi-user ターゲットが起動した時にあなたのスクリプトを実行します。スクリプトには実行可能属性が付与されているようにしてください。

myscript.service有効化すると次回起動時からは起動時に実行されます。

ノート: シェルスクリプトを起動したい場合は、スクリプトの最初の行に shebang を置くようにしてください: #!/bin/sh。次のように書いても機能しません: ExecStart=/bin/sh /path/to/script.sh # DOES NOT WORK

.service の状態が緑の "active (exited)" (例: iptables)

これはおかしなことでは全くありません。iptables の場合、実行するデーモンがなくカーネル内でコントロールされるためです。従って、ルールがロードされた後 iptables は終了します。

iptables のルールが正しくロードされたか確認するには:

# iptables --list

Failed to issue method call: File exists エラー

systemctl enable を使った時に /etc/systemd/system/ 内にすでに作成しようとしたシンボリックリンクが存在する場合にこのエラーが表示されます。大抵はディスプレイマネージャを他のものに切り替える時 (例えば GDM から KDM に、それぞれ gdm.servicekdm.service を使って有効にできます) 該当するシンボリックリンク /etc/systemd/system/display-manager.service が既に存在する場合にエラーが起きます。

この問題を解決するには、まず適切なディスプレイマネージャを無効にしてから新しいディスプレイマネージャを有効にするか、systemctl -f enable を使って既存のシンボリックリンクを上書きしてください。