web-dev-qa-db-ja.com

systemd:実行中のターゲットを取得する方法

  • コマンドsystemctl get-defaultuser-defined.targetを返します。
  • 次に、systemctl isolate multi-user.targetを使用してmulti-user.targetに切り替えます。
  • user-defined.taretで実行してはならず、multi-userで実行する必要がある一連のサービスが実行されていることがわかります。これは、私がmulti-user.targetを使用していることを意味します。
  • ただし、systemctl get-defaultは常にuser-defined.targetを返します。

問題は、サービスを調べたり並べ替えたりせずに、isolateを使用した後、multi-user.targetで実行していることをどのようにして知ることができるかです。

6
iamauser

実行中のターゲットまたはisolateで使用された最後のターゲットをクエリするsystemdコマンドはありません。

systemdには、古いシステムとの互換性のためにrunlevelというコマンドが付属しています。これは、現在の「ランレベル」を防ぎます。コンセプトは時代遅れですが、man runlevel、特定の実行レベルは特定のsystemdターゲットにマップされます。このコマンドは、標準ターゲットが使用されている場合に役立つことがあります。レガシーランレベルにマッピングされていないカスタムターゲットが使用された場合は、役に立ちません。

回避策の詳細については、[ https://www.centos.org/forums/viewtopic.php?t=54347](CentOS フォーラム)をご覧ください。

2
Mark Stosberg

前述の回答と同様に、以下を使用できます。

systemctl list-units --type target | egrep "eme|res|gra|mul" | head -1

結果として得られるのは、現在のターゲットです。

上記の4つの文字列のいずれかが名前に含まれているユニットをインストールした場合、その前に^文字を追加できます-egrep "^eme|^res|^gra|^mul"

1
Damir

Systemdでは、一度に複数のアクティブなターゲットが存在する場合があります。

現在アクティブなすべてのターゲットのリストを検査するには:

systemctl list-units --type target --state active

特定のターゲット(例:user-defined.target)がアクティブかどうか:

systemctl is-active user-defined.target
1
Amir

これが私があなたの現在のターゲットモードを見つけるために同行できる最良の方法です。

緊急-コマンドを実行した後systemctl list-units --type target緊急ターゲット

レスキュー-コマンドの実行後systemctl list-units --type targetrescue target

マルチユーザー-コマンドを実行した後systemctl list-units --type targetマルチユーザーターゲット

1
Mighty Max

残念ながら、これらの回答はどれも現在どのランレベルがアクティブであるかを示していません。彼らはすべて私の場合、両方のmulti-user.targetおよびgraphical.targetはロード済み/アクティブです。これまでのところ、runlevelコマンドのみが現在のランレベルを示しています。

runlevel | awk '{print $2}'

0