0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

systemd-runでリソース制限してコマンドを実行する

Last updated at Posted at 2025-01-18

1 systemd-runコマンド

systemd-runは、systemdを使用しているLinuxで、一時的にsystemdユニットを作成して実行できるコマンドである。
例:

 # systemd-run sleep 60

このコマンドを実行すると、60秒待機するだけのserviceを生成し、systemdによってserviceが起動される。
通常のserviceと同じように管理されるので、たとえばsystemctl catコマンドでserviceの中身を見ることもできる。

 $ systemctl cat run-re49ded26b30140fe9537410ece21c8e6.service
# /run/systemd/transient/run-re49ded26b30140fe9537410ece21c8e6.service
# This is a transient unit file, created programmatically via the systemd API. >
[Unit]
Description=/usr/bin/sleep 60

[Service]
ExecStart=
ExecStart="/usr/bin/sleep" "60"

プロセスが終了すると、生成されたserviceは自動的に削除される。

2 通常のコマンド実行のように実行する

systemd-runを普通に実行すると、プロセスはsystemdによってバックグラウンドで実行され、出力はターミナルには直接表示されず、ログとして回収される(journalctlコマンドで見られる)。
この動作は、デーモンとしてプロセスを実行させたいときには都合が良いが、気軽にコマンドを叩きたいときには不便なので、ここでは通常のコマンド実行のようになるようにオプションで動作を変えてみたい。

結論としては、以下のようにオプションを使用するのが便利だと思う。

 $ systemd-run --user --scope --quiet --same-dir コマンド

各オプションについて

  • --user ユーザー側のsystemdを使用する。これによりユーザー権限でコマンドを実行できる。
  • --scope serviceを作成せず、コマンドはユーザーセッションから直接実行される。scopeを一時的に作成し、実行したプロセスはそのscopeに登録される。
  • --quiet systemd-runコマンドの出力を抑制する。
  • --same-dir コマンドの実行ディレクトリをカレントディレクトリにする。

3 リソースを制限する

systemd-runコマンドでは、-pオプションを使ってリソース制限の設定をすることができる。
なお、プロセス内で他のプロセスを起動した場合、その子プロセスも自動的に管理下に入る。(その場合、親と子プロセスの合計値が制限されることになる)

主な設定

設定 効果
MemoryHigh=bytes 最大使用メモリを指定する。単位としてK, M, G, Tが使える。
メモリ制限を超過してもプロセスは停止せず、実行が非常に遅くなる。
MemoryMax=bytes 上のMemoryHighと同様だが、メモリ制限を超過するとプロセスが停止する。
CPUQuota= 単位として「%」をつけて指定する。CPUの使用量を制限する。
複数のCPUを使いたいときは100%より大きい値を指定する。
TasksMax=N プロセス数の最大値を指定する。
IOReadBandwidthMax=device bytes 指定したdeviceに対するI/Oの読み込み速度(一秒単位)を制限する。
バイトの指定にはK, M, G, Tが使える。
IOWriteBandwidthMax=device bytes 上記と同様に、I/Oの書き込み速度を制限する。

たとえば、メモリ使用量を500MBに制限してコマンドを実行したい場合は以下のようになる。

 $ systemd-run --user --scope --quiet --same-dir -p MemoryMax=500M コマンド

参考リンク

https://www.freedesktop.org/software/systemd/man/latest/systemd.resource-control.html
https://www.freedesktop.org/software/systemd/man/latest/systemd-run.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?