cgroups v2(Ubuntu 22.04など)を使用するオペレーティングシステムでは、root権限がないとプロセスは「cgexec」できません。特定のユーザーの権限を設定するためにルートを一度使用した場合、このタイプのコードは正しく機能しました。最新のRedhatバージョンで試してみましたが、同様の問題がありました。
たとえば、
$ sudo cgcreate -t caj:caj -a caj:caj -g memory:qqq
[sudo] password for caj:
$ cgexec -g memory:qqq ls
cgroup change of group failed
$ sudo cgexec -g memory:qqq ls
<files ...>
答え1
ユーザーフラグメントの下にグループを作成します(正しいユーザーIDを使用していることを確認してください)。
変える:
sudo cgcreate -t caj:caj -a caj:caj -g memory:qqq
cgexec -g memory:qqq ls
努力する:
sudo cgcreate -t caj:caj -a caj:caj -g memory:user.slice/user-1000.slice/[email protected]/qqq
cgexec -g memory:user.slice/user-1000.slice/[email protected]/qqq ls
で参照してくださいプログラムの実行マニュアルページにCGROUP_LOGLEVEL環境変数で設定可能デバッグ、情報、警告するまたは間違いこれは、「該当するファイルまたはディレクトリなし」または「権限が拒否されました」などの特定の問題や関連ファイルを特定するのに役立ちます。
以下を表示するには、コマンドのCGROUP_LOGLEVELをINFOに設定します。
CGROUP_LOGLEVEL=INFO cgexec -g memory:qqq ls
Warning: cannot write tid 2482 to /sys/fs/cgroup/qqq/cgroup.procs:Permission denied
次のコマンドを実行して、現在のシェルのグループを表示できます。
cat /proc/self/cgroup
0::/user.slice/user-1000.slice/[email protected]/app.slice/app-org.gnome.Terminal.slice/vte-spawn-*.scope
cgroup v2のカーネルドキュメントでは代表団封鎖部分的に説明 グループ間でプロセスを移動するには、次の手順を実行します。
作成者は、ソースおよびターゲットcgroupの共通祖先である「cgroup.procs」ファイルへの書き込みアクセス権を持っている必要があります。
そして、次の例を見てください。
例えば、以下に示すように、cgroup C0 と C1 がユーザ U0 に委任され、ユーザ U0 が C00、C0 の下に C01、C1 の下に C10 が生成され、C0 と C1 の下のすべてのプロセスが U0 に属すると仮定します。
U0が現在C10にあるプロセスのPIDを「C00/cgroup.procs」に書きたいとしましょう。 U0にはファイルへの書き込み権限があります。ただし、ソースcgroup C10とターゲットcgroup C00の共通祖先は委任ポイントの上にあり、U0には「cgroup.procs」ファイルへの書き込み権限がないため、書き込みは拒否されます。 -EACCES。
cgexecを実行すると、lsプロセスをuser.sliceの下の現在のグループからqqqグループ(上記に示す)に移動しようとします。 IIUC共通祖先はルートcgroupであるため、権限が拒否されます。
cgexecコマンドを表示するには、CGROUP_LOGLEVEL = DEBUGを使用してください。
PID 3042をcgroup 'qqq'に移動
そして
cgroup グループの変更に失敗しました。
$ CGROUP_LOGLEVEL=DEBUG cgexec -g memory:qqq ls
Found cgroup option cpuset, count 0
Found cgroup option cpu, count 1
Found cgroup option io, count 2
Found cgroup option memory, count 3
Found cgroup option hugetlb, count 4
Found cgroup option pids, count 5
Found cgroup option rdma, count 6
Found cgroup option misc, count 7
My euid and egid is: 1000,1000
Will move pid 3042 to cgroup 'qqq'
Adding controller memory
Warning: cannot write tid 3042 to /sys/fs/cgroup/qqq/cgroup.procs:Permission denied
Warning: cgroup_attach_task_pid failed: 50007
cgroup change of group failed