追加読書

追加読書

systemdにはまだランレベルの概念がありますか?たとえば、を使用することは意味がありませんかtelinit <number>

答え1

SystemD 実行レベルのサブレイヤ

SystemD(aemon)では、ランレベルが「ターゲット」として公開されます。概念は依然として存在しますが、目的の結果を生成するワークフローは要件によって異なります。

添付ファイルではこの問題を明確にする必要があります。

現在のランレベルを変更するには?

$ systemctl isolate runlevelX.target

次の起動にデフォルトのランレベルを変更するにはどうすればよいですか?

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -sシンボリックリンクの生成
  • -f既存のターゲットファイルの削除

または(@centimaneが提案したように)単に「blessed」systemdコマンドを使用してください。

systemctl set-default [target name].target

現在のランレベルを識別する方法は?

$ systemctl list-units --type=target

答え2

いいえ。システムを備えた人々が2回、つまりマニュアルに1回telinit、マニュアルに1回書いたように、ランレベルはrunlevel「昔ながら」です。ランレベルは忘れてもいいです。

いくつかの互換性シムを除いて、これらは実際にsystemdにはまったく存在しません。

  • 一部のターゲット名へのシンボリックリンクがありますが、これらのターゲットは実際にはsystemdでは使用されません。
    • 代わりに、ブートプロセスはa(およびdefault.targetaとaの一方または両方)、a、またはanを使用します。終了プロセスには、a、a、またはaが含まれます。 graphical.targetmulti-user.targetrescue.targetemergency.targetshutdown.targetreboot.targethalt.targetpoweroff.target関連する実行レベルのターゲットはありません。起動またはシャットダウン中。
    • コマンドは互換性シンボリックリンクを使用してコマンドライン引数をマッピングすると考えることができますが、telinitそうしません。プログラムのソースコードには固定配線されたテーブルがあり、コマンドの引数であるtelinit数字23および4は、およびにマッピングされるように固定配線されています。5multi-user.targetgraphical.target
    • systemd-update-utmp内部に固定配線されたテーブルもあります。
  • 実行レベルのコンテンツには「初期化テーブル」はありません。 systemdはvan Smoorenburgとのみ互換性があり、rcvan Smoorenburgとは互換性がありませんinit
  • systemd自体は「現在実行レベル」の値を保持しません。代わりに、ほとんど完全に文書化されていないsystemd-update-utmpコマンドは、およびのアクティブ状態によってrescue.target内部的にmulti-user.target実行されますgraphical.target
  • systemd-sysv-generator、ディレクトリを生成されたサービスユニットと/etc/rc[234].d一意の関係にマージするsystemd用の以前のバージョンと互換性のあるサービスユニットジェネレータですWanted-Bymulti-user.target生成されたサービスユニットには、ランレベルへの実際の参照はありません。 (数年前にもこのようなことがありましたが、他の場所で参照されていないため、システムの人々はこれが間違っていることを発見しました。)

質問者が「Arch Linux」で行ったように、systemdが構築されたシステムのユーザーであればArchのインストール中に「init 0」が原因で「超過パラメータ」が表示されるのはなぜですか?「、人々は互換性の深さを得ることができず、そのようなコマンドは、コマンドが誤って呼び出されたと不平を言うinit 0「基本」システム動作につながります。

追加読書

答え3

とても感謝しています。したがって、私が正しく理解した場合は、次のようになります。

たとえば、

ls -ll /usr/lib/systemd/system/runlevel*.target

出力:

/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target

ご覧のとおり、ランレベルの概念は存在しますが、runlevel.targetファイルは実際には「実際の」ファイルではなく、新しく現代的でより良い名前のファイルスキームであるため、使用されなくなりました。ソフトリンクの場合、プログラムsystemdはこれを「ターゲット」と呼ぶのが好きです。

したがって、次のようなことをしたい場合は、次のようになりますtelinit 5。 (私の考えにはお勧めです)systemctl isolate runlevel5.targetsystemctl isolate graphical.target

可能なすべての目標について学びたい場合:

ls /usr/lib/systemd/system/*.target

答え4

導入されたシステムターゲット相手としてランレベルsysV初期化システムで。 sytemd 開発者はほとんどの sysV スクリプトとほぼ互換性がありました。でも同様です telinit <runlevel>。これはsystemdに変換されます。

たとえば、telinit 0本機の電源を切ってください。システムは停電対象同じこと実行レベル0。だからtelinit 0システム翻訳で活性化停電対象

しかし、sytemdとsysV initシステムの間にはいくつかの互換性の問題があります。 ->https://www.freedesktop.org/wiki/Software/systemd/Incompatibility

関連情報