systemdはまだランレベルを知っていますか?


17

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



私は以下の回答については知りませんが、RHEL / Centos 7.6では、init 1または/ init 3またはinit 5/ init 6またはinit 0それrunlevelでもいつものように動作し、それが私が気にするすべてです。はるかに簡単な構文systemctl blabla blabla.blabla
ron

回答:


14

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

initコマンドを使用してランレベルを切り替えることはできますか?
drpaneas 14年

2
systemdパッケージがSysV compatサポート付きでビルドされている場合、systemdバイナリへのtelinitシンボリックリンクが含まれます。telinitとして呼び出されると、ランレベル0-6がsystemdターゲットにマッピングされます-それらのマッピングのリストについてはtelinit(8)を確認してください。
ヴィーランド14年

2
デフォルトのターゲットを変更するにsystemctl set-default [target name].targetは、手動でリンクを作成するのではなく使用する必要があります。
Centimane

13

いいえ。systemdの人々自身が2回書きました。1回はtelinitマニュアルに、もう1回はマニュアルに書かれているためrunlevel、ランレベルは「時代遅れ」です。ランレベルについては忘れることができます。

これらのことは、実際にはsystemdにはまったく存在せず、いくつかの互換性シムがあります。

  • ターゲット名にはいくつかのシンボリックリンクがありますが、これらのターゲットは実際にはsystemdによって使用されることはありません。
    • むしろ、ブートストラッププロセスは、a default.target(およびa graphical.targetおよびaの一方または両方multi-user.target)、a rescue.target、またはanを使用しemergency.targetます。そして、シャットダウンプロセスが含まれshutdown.targetreboot.targethalt.target、またはpoweroff.target。 ブートストラップまたはシャットダウンは、実行レベルのターゲットは関係ません
    • telinit1が使用する互換性のシンボリックリンクがそのコマンドライン引数をマッピングするために思うかもしれないコマンドは、どちらかそれをしません。そこのソースコード内のハードワイヤードテーブルのtelinitプログラムは、数字234、および5コマンドの引数はにマッピングするためにハードワイヤードされるmulti-user.targetgraphical.target
    • systemd-update-utmp 内部にハードワイヤードテーブルもあります。
  • ランレベルのものの「初期化テーブル」はありません。systemdはvan Smoorenburgとのみ互換性があり、van Smoorenburgとは互換性がrcありませんinit
  • systemd自体によって維持される「現在の実行レベル」の値はありません。むしろ、ほとんど完全に文書化されていないsystemd-update-utmpコマンドは、の活性化状態の観点から内部動作rescue.targetmulti-user.targetgraphical.target
  • systemd-sysv-generator、systemdの後方互換性サービスユニットジェネレーターは、生成されたサービスユニット内の/etc/rc[234].dディレクトリを1つのWanted-By関係にマージしmulti-user.targetます。生成されたサービスユニットの実行レベルへの実際の参照はありません。(以前はありましたが、システム化された人々は、他のどこからも参照されていなかったため、これが間違っていることを発見しました。)

1はアーチLinuxは「で質問者のために行ったようにsystemdビルドシステムの利用者である場合は、 『インストールアーチの上に?余分な引数はなぜ` initはにつながる0`ん』」、1であっても互換性のシムを取得し、そのようなコマンドはありませんなどinit 0のコマンドが誤って呼び出されたと文句を言うことです「ネイティブ」systemdに振る舞い、で結果。

参考文献


4

どうもありがとう。したがって、私が正しく理解した場合:

例えば:

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はそれらを「ターゲット」と呼びます。

だから、あなたのようSTHをしたいと思った場合telinit 5、それはこのようになります:systemctl isolate runlevel5.target と同一である:systemctl isolate graphical.target(私の意見では推奨)。

すべての可能なターゲットを知りたい場合に備えて:

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

はい、あなたはこれを正しく理解していると思います。手続き型の段階的なINIT.Dシステムは私が最もよく知っているものなので、私はSystemDの遅れた採用者になります。SystemDの最も優れた点は、並列マルチスレッド化であり、起動を高速化できます。マルチスレッドブートはINIT.Dで実行できますが、強力なBASHスクリプトが必要です。
タイラーマギニス14年

ところで、ls -llと同等ls -lです。を使用する習慣を身に付けたいかもしれませんls -ld
G-Manが「Reinstate Monica」と言う

telinit 0/ telinit 6それでも動作します。これは移行に役立つので、ほとんどのディストリビューションにはまだサポートを終了する理由が見当たらないと思います。isolateランレベルがどのように機能するかを真似ようとすることを明確に望んでいましたが、さまざまな悪のエッジケースがあります。私は非常にすべての命令を無視してお勧めしますisolate runlevel5.targetかさえもisolate graphical.target。エッジケースの例:github.com/systemd/systemd/issues/6505
sourcejedi

0

systemd は、sysV initシステムのランレベルの対応物としてターゲットを導入ました。sytemd開発者は、ほとんどのsysVスクリプトとほぼ互換性を持たせました。同じことが起こり ます。これは同等のsystemdに変換されます。telinit <runlevel>

たとえばtelinit 0、マシンの電源をオフにします。systemdには、ランレベル0と同じことを行うpoweroff.targetがあります。だから、telinit 0アクティブにするためにsystemdで翻訳されていますpoweroff.target

しかし、いくつかの互換性の問題がsytemdであるおよびSysVのinit systems-> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.