cgroups v2(統合)階層を実行するコンピュータがあるため、systemdはすべてのcgroupを管理し、systemdユーザーインスタンスにタスクを委任します。公演したい資源管理一連のプロセスに適用されるため、これを1つの単位にまとめる必要があります。システム全体。
一般的にsystemd-run
これを行うことができます。しかし、残念ながら、これらのプロセスはすでに実行中であるため、再起動したくありません。
どうやって作れますか?システム全体既存のプロセスでは?これコントロールグループインターフェースドキュメントはこれが可能であることを示していますが、コマンドラインでは方法が見つかりません。どちらもこれを行うことができないsystemctl
ようです。systemd-run
コマンドラインから方法がありますか?重要な場合は、systemd v241を実行しています。
ベストアンサー1
dbusを呼び出すためのさまざまなコマンドラインツールがあります。 systemdには.というツールが付属しているため、コマンドラインから呼び出すことがbusctl
できます。StartTransientUnit
注文する
構文は本当に迷惑ですが、次のようになります(1つのプロセスIDの場合は14460)。
busctl call --user org.freedesktop.systemd1 /org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager StartTransientUnit 'ssa(sv)a(sa(sv))' \
'SCOPE-NAME.scope' fail 1 PIDs au 1 14460 0
説明する
これは確かに不透明です(正しく作成するために数回試した後にどのように機能するかをdbus-monitor
確認するために使用されましたが、dbusを介してではなくsysmanagerでのみ使用されるようです)。したがって、パラメータごとに説明すると、次のようになります。systemd-run
systemd-run --user
busctl call --user # use user session dbus, not system
org.freedesktop.systemd1 # dbus service name
/org/freedesktop/systemd1 # dbus object in that service
org.freedesktop.systemd1.Manager # interface name in that service
StartTransientUnit # method we're going to call
'ssa(sv)a(sa(sv))' # signature of method, see below
'SCOPE-NAME.scope' # first argument, name of scope
fail # second argument, how to handle conflicts (see below)
1 # start of third argument, number of systemd properties for unit
PIDs # name of first property
au # data type of first property, (a)rray [aka list] of (u)nsigned integers
1 # count of array — that is, number of pids
14460 # first pid
0 # fourth argument: array size=0 (unused parameter)
コマンドに追加
その他の宿泊施設
デバイスに別のシステム属性を追加するには、属性の数を増やして追加する必要があります。各プロパティは、キー、値タイプ、値という3つ以上の追加のコマンドラインパラメータです。たとえば、Slice プロパティを追加する場合は次のようになります。
… fail 1 PIDs au 1 14460 0
到着
… fail 2 PIDs au 1 14460 Slice s whatever.slice 0
^ ^^^^^ ^ ^^^^^^^^^^^^^^
count key type value
「s」タイプは文字列です。そのリストは以下にあります。D-Bus仕様の「タイプシステム」の章
もちろん、数を3に変更して3番目の属性を追加することもできます。など。
より多くのPID
追加の属性と似ていますが、今回は「PID」属性の値に隠された数です。たとえば、より明確になります。
… fail 1 PIDs au 1 14460 0
~になる
… fail 1 PIDs au 2 14460 14461 0
^ ^^^^^
internal count second pid
PID 14461と14460を追加する場合。
同様に、3番目、4番目などのPIDを追加できます。
それらを組み合わせる
もちろん、他の属性を他のPIDと組み合わせることもできます。 pidリストは属性値なので、一緒に保管する必要があることを覚えておいてください。 pidパラメータを他の属性と混在させることはできません。正しいアプローチは、以下を変更することです。
… fail 1 PIDs au 1 14460 0
到着する:
… fail 2 PIDs au 2 14460 14461 Slice s whatever.slice 0
(順序は重要ではありません。PIDブロックの前にSliceブロックを配置できます。)
署名はどこから来ますか?
署名は以下から取得できます。systemddbus APIドキュメントまたは、dbus内部チェックを使用すると簡単になります。
$ busctl introspect org.freedesktop.systemd1 /org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager | grep1 StartTransientUnit
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.StartTransientUnit method ssa(sv)a(sa(sv)) o -
(についてはgrep1
以下を参照してください。)https://unix.stackexchange.com/a/279518)
これには、180を超えるさまざまなメソッドとdbusプロパティがリストされています。だから省略しないでくださいgrep
。
紛争に対処するために「失敗」することはどういう意味ですか?また何がありますか?
~によるとシステム文書(「CreateUnit」の下を参照)有用な値fail
はとですreplace
。fail
つまり、競合がある場合、範囲は開始されません。replace
systemdが衝突するユニットを削除することを意味します。これは、現在実行中または予約されているデバイス(「待機中」と表示されている)にのみ適用されるようです。たとえば、置換はすでに実行されている範囲を同じ名前に置き換えません。