「Systemd FAQ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「http://cgit.freedesktop.org/」を「https://cgit.freedesktop.org/」に置換)
 
(3人の利用者による、間の4版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:デーモンとシステムサービス]]
+
[[Category:init]]
[[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 ==
19行目: 18行目:
 
カーネルの loglevel はあなた自身の手で設定してください。歴史的に、{{ic|/etc/rc.sysinit}} がこれを行って dmesg のログレベルを {{ic|3}} (適度に quiet なログレベル) に設定していました。{{ic|1=loglevel=3}} か {{ic|quiet}} のどちらかを[[カーネルパラメータ]]に追加してください。
 
カーネルの loglevel はあなた自身の手で設定してください。歴史的に、{{ic|/etc/rc.sysinit}} がこれを行って dmesg のログレベルを {{ic|3}} (適度に quiet なログレベル) に設定していました。{{ic|1=loglevel=3}} か {{ic|quiet}} のどちらかを[[カーネルパラメータ]]に追加してください。
   
=== デフォルトで動作する getty の数を修正するにはどうすればいいですか ===
+
=== デフォルトで動作する getty の数を修正するにはどうすればいいですか? ===
   
  +
現在、デフォルトで起動される getty は 1 つだけです。別の TTY に切り替えると、そこで getty が起動されます (ソケットアクティブ化スタイル) {{ic|Ctl+Alt+F2}} で tty2 新しい getty を起動します。
getty を追加するには、{{ic|/etc/systemd/system/getty.target.wants/}} ディレクトリに getty をインスタンス生成するシンボリックリンクを作ってください:
 
   
  +
デフォルトでは、自動アクティブ化される getty の数は 6 に制限されています。したがって、{{ic|F7}} から {{ic|F12}} は getty を起動しません。
# ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service
 
# systemctl start getty@tty9.service
 
   
  +
この動作を変更したい場合は、{{ic|/etc/systemd/logind.conf}} を編集して、{{ic|NAutoVTs}} の値を変更します。すべての {{ic|F''x''}} キーで getty を開始したい場合は、{{ic|NAutoVTs}} の値を {{ic|12}} に増やします。[[systemd/ジャーナル#journald を /dev/tty12 に転送する|ジャーナルを tty12 に転送]] する場合は、{{ic|NAutoVTs}} の値を {{ic|11}} に増やします (したがって、tty12 は空きのままになります)
getty を削除するには、{{ic|/etc/systemd/system/getty.target.wants/}} ディレクトリから削除したい getty のシンボリックリンクを削除してください:
 
   
  +
ブート時に実行される getty を事前にアクティブ化することもできます。
# rm /etc/systemd/system/getty.target.wants/getty@{tty5,tty6}.service
 
# systemctl stop getty@tty5.service getty@tty6.service
 
   
  +
別の事前にアクティブ化された getty を追加するには、{{ic|getty@tty''X''.service}} を [[有効化]] および [[起動]] します。
systemd は {{ic|/etc/inittab}} ファイルを使いません。
 
   
  +
getty を削除するには、関連する {{ic|getty@tty''X''.service}} を [[無効化]] および [[停止]] します。
{{Note|systemd 30 では、デフォルトで getty はひとつだけ起動します。他の tty に切り替えた場合、そこに getty が起動します (socket-activation style)。上の方法を使って agetty プロセスの追加を強制することは可能です。}}
 
   
  +
systemd は {{ic|/etc/inittab}} ファイルを使用しません。
{{ic|/etc/systemd/logind.conf}} を編集して {{ic|NAutoVTs}} の値を変更することで自動で生成させる getty の数を変更することもできます。このようにすれば、必要なときに生成されるのは変わらずに、上の方法で起動時に実行する getty を指定できます。
 
   
 
=== 起動中の出力をもっと詳細に表示するにはどうすればいいですか? ===
 
=== 起動中の出力をもっと詳細に表示するにはどうすればいいですか? ===
93行目: 90行目:
 
{{ic|systemctl halt}} ではなく次のコマンドを使って下さい:
 
{{ic|systemctl halt}} ではなく次のコマンドを使って下さい:
 
$ systemctl poweroff
 
$ systemctl poweroff
 
=== systemd に移行した後、fakeRAID がマウントされません ===
 
 
次を使っているか確認してください:
 
# systemctl enable dmraid.service
 
   
 
=== ブートプロセスの間にスクリプトを起動するにはどうすればいいですか? ===
 
=== ブートプロセスの間にスクリプトを起動するにはどうすればいいですか? ===
   
{{ic|/etc/systemd/system}} に新しいファイル (例: ''myscript''.service) を作成して以下の内容を追加してください:
+
{{ic|/etc/systemd/system/''myscript''.service}} とのように新しいファイル を作成して以下の内容を追加してください:
   
 
[Unit]
 
[Unit]
112行目: 104行目:
 
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}}。}}
127行目: 118行目:
 
# iptables --list
 
# iptables --list
   
  +
=== 既存のシンボリックリンクのためにユニットを有効にすることができない ===
=== {{ic|Failed to issue method call: File exists}} エラー ===
 
  +
  +
ユニットを [[有効化]] しようとすると、次のようなエラーが発生することがあります。
  +
  +
Failed to enable unit: File /etc/systemd/system/''symlink'' already exists and is a symlink to ''file''.
   
{{ic|systemctl enable}} を使った時に {{ic|/etc/systemd/system/}} すでに作成しようとしたシンボリックリンクが存在する場合にこのエラー表示されます。大抵はディスプレイマネージャを他のものに切り替える時 (例えば GDM から KDM 、それぞれ {{ic|gdm.service}} と {{ic|kdm.service}} を使って有効にできます) 該当するシンボリックリンク {{ic|/etc/systemd/system/display-manager.service}} が既に存在する場合エラーがます。
+
ユニットを有効にして作成された {{ic|''symlink''}} が既に {{ic|/etc/systemd/system/}} に存在する場合に発生する可能性あります。これ通常、あるディスプレイマネージャから別ディスプレイに切り替えたとき (例えば [[GDM]] から [[SDDM]] 、それぞれ {{ic|gdm.service}} と {{ic|sddm.service}} 有効にでき)、対応するシンボリックリンク {{ic|/etc/systemd/system/display-manager.service}} が既に存在するときに起こります。
   
この問題を解決するには、まず適切なディスプレイマネージャを無効にしてから新しいディスプレイマネージャを有効にするか、{{ic|systemctl -f enable}} を使って既存のシンボリックリンクを上書きしてください。
+
この問題を解決するには、まず関連するディスプレイマネージャを無効にしてから新しいものを有効にするか、新しいものを有効にするときに {{ic|-f}}/{{ic|--force}} オプションを使って既存の競合するシンボリックリンクを上書きします ({{man|1|systemctl|OPTIONS}} による)

2024年3月5日 (火) 23:54時点における最新版

関連記事

FAQ

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

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

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

デフォルトで動作する getty の数を修正するにはどうすればいいですか?

現在、デフォルトで起動される getty は 1 つだけです。別の TTY に切り替えると、そこで getty が起動されます (ソケットアクティブ化スタイル) Ctl+Alt+F2 で tty2 新しい getty を起動します。

デフォルトでは、自動アクティブ化される getty の数は 6 に制限されています。したがって、F7 から F12 は getty を起動しません。

この動作を変更したい場合は、/etc/systemd/logind.conf を編集して、NAutoVTs の値を変更します。すべての Fx キーで getty を開始したい場合は、NAutoVTs の値を 12 に増やします。ジャーナルを tty12 に転送 する場合は、NAutoVTs の値を 11 に増やします (したがって、tty12 は空きのままになります)

ブート時に実行される getty を事前にアクティブ化することもできます。

別の事前にアクティブ化された getty を追加するには、getty@ttyX.service有効化 および 起動 します。

getty を削除するには、関連する getty@ttyX.service無効化 および 停止 します。

systemd は /etc/inittab ファイルを使用しません。

起動中の出力をもっと詳細に表示するにはどうすればいいですか?

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有効化すると次回起動時からは起動時に実行されます。

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

.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.servicesddm.service で有効にできる)、対応するシンボリックリンク /etc/systemd/system/display-manager.service が既に存在するときに起こります。

この問題を解決するには、まず関連するディスプレイマネージャを無効にしてから新しいものを有効にするか、新しいものを有効にするときに -f/--force オプションを使って既存の競合するシンボリックリンクを上書きします (systemctl(1) § OPTIONS による)