「Systemd FAQ」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (カテゴリを修正) |
|||
(同じ利用者による、間の1版が非表示) | |||
18行目: | 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 を指定できます。 |
||
=== 起動中の出力をもっと詳細に表示するにはどうすればいいですか? === |
=== 起動中の出力をもっと詳細に表示するにはどうすればいいですか? === |
||
120行目: | 118行目: | ||
# iptables --list |
# iptables --list |
||
+ | === 既存のシンボリックリンクのためにユニットを有効にすることができない === |
||
− | === {{ic|Failed to issue method call: File exists}} エラー === |
||
+ | ユニットを [[有効化]] しようとすると、次のようなエラーが発生することがあります。 |
||
− | {{ic|systemctl enable}} を使った時に {{ic|/etc/systemd/system/}} 内にすでに作成しようとしたシンボリックリンクが存在する場合にこのエラーが表示されます。大抵はディスプレイマネージャを他のものに切り替える時 (例えば GDM から KDM に、それぞれ {{ic|gdm.service}} と {{ic|kdm.service}} を使って有効にできます) 該当するシンボリックリンク {{ic|/etc/systemd/system/display-manager.service}} が既に存在する場合にエラーが起きます。 |
||
+ | Failed to enable unit: File /etc/systemd/system/''symlink'' already exists and is a symlink to ''file''. |
||
− | この問題を解決するには、まず適切なディスプレイマネージャを無効にしてから新しいディスプレイマネージャを有効にするか、{{ic|systemctl -f enable}} を使って既存のシンボリックリンクを上書きしてください。 |
||
+ | |||
+ | ユニットを有効にして作成された {{ic|''symlink''}} が既に {{ic|/etc/systemd/system/}} に存在する場合に発生する可能性があります。これは通常、あるディスプレイマネージャから別のディスプレイに切り替えたとき (例えば [[GDM]] から [[SDDM]] へ、それぞれ {{ic|gdm.service}} と {{ic|sddm.service}} で有効にできる)、対応するシンボリックリンク {{ic|/etc/systemd/system/display-manager.service}} が既に存在するときに起こります。 |
||
+ | |||
+ | この問題を解決するには、まず関連するディスプレイマネージャを無効にしてから新しいものを有効にするか、新しいものを有効にするときに {{ic|-f}}/{{ic|--force}} オプションを使って既存の競合するシンボリックリンクを上書きします ({{man|1|systemctl|OPTIONS}} による) |
2024年3月5日 (火) 23:54時点における最新版
関連記事
目次
- 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 は 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 を有効化すると次回起動時からは起動時に実行されます。
.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 による)