回答:
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
systemctl set-default [target name].target
は、手動でリンクを作成するのではなく使用する必要があります。
いいえ。systemdの人々自身が2回書きました。1回はtelinit
マニュアルに、もう1回はマニュアルに書かれているためrunlevel
、ランレベルは「時代遅れ」です。ランレベルについては忘れることができます。
これらのことは、実際にはsystemdにはまったく存在せず、いくつかの互換性シムがあります。
default.target
(およびa graphical.target
およびaの一方または両方multi-user.target
)、a rescue.target
、またはanを使用しemergency.target
ます。そして、シャットダウンプロセスが含まれshutdown.target
、reboot.target
、halt.target
、またはpoweroff.target
。 ブートストラップまたはシャットダウンには、実行レベルのターゲットは関係しません。telinit
1が使用する互換性のシンボリックリンクがそのコマンドライン引数をマッピングするために思うかもしれないコマンドは、どちらかそれをしません。そこのソースコード内のハードワイヤードテーブルのtelinit
プログラムは、数字2
、3
、4
、および5
コマンドの引数はにマッピングするためにハードワイヤードされるmulti-user.target
とgraphical.target
。systemd-update-utmp
内部にハードワイヤードテーブルもあります。rc
ありませんinit
。systemd-update-utmp
コマンドは、の活性化状態の観点から内部動作rescue.target
、multi-user.target
とgraphical.target
。systemd-sysv-generator
、systemdの後方互換性サービスユニットジェネレーターは、生成されたサービスユニット内の/etc/rc[234].d
ディレクトリを1つのWanted-By
関係にマージしmulti-user.target
ます。生成されたサービスユニットの実行レベルへの実際の参照はありません。(以前はありましたが、システム化された人々は、他のどこからも参照されていなかったため、これが間違っていることを発見しました。)1はアーチLinuxは「で質問者のために行ったようにsystemdビルドシステムの利用者である場合は、 『インストールアーチの上に?余分な引数はなぜ` initはにつながる0`ん』」、1であっても互換性のシムを取得し、そのようなコマンドはありませんなどinit 0
のコマンドが誤って呼び出されたと文句を言うことです「ネイティブ」systemdに振る舞い、で結果。
runlevel
。systemdのマニュアルページ。Freedesktop.org。telinit
。systemdのマニュアルページ。Freedesktop.org。bootup
。systemdのマニュアルページ。Freedesktop.org。/etc/inittab
過去のものです。。よくある回答。どうもありがとう。したがって、私が正しく理解した場合:
例えば:
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
ls -ll
と同等ls -l
です。を使用する習慣を身に付けたいかもしれませんls -ld
。
telinit 0
/ telinit 6
それでも動作します。これは移行に役立つので、ほとんどのディストリビューションにはまだサポートを終了する理由が見当たらないと思います。isolate
ランレベルがどのように機能するかを真似ようとすることを明確に望んでいましたが、さまざまな悪のエッジケースがあります。私は非常にすべての命令を無視してお勧めしますisolate runlevel5.target
かさえもisolate graphical.target
。エッジケースの例:github.com/systemd/systemd/issues/6505
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。