---
title: スケジュールでシート数を制限する
description: OpenLM Platform の予約を使って、指定した時間帯に OpenLM LicOps が各ライセンスサーバーで割り当てるシート数に上限を設け、バッチジョブが他のユーザーの分を残すようにします。
product: OpenLM Platform
---

バッチジョブと人が同じライセンスサーバーを共有していると、エンジニアが席にいる時間帯にジョブがすべてのシートを使ってしまうことがあります。*予約*を使うと、これを防げます。指定した時間帯には、LicOps が各サーバーで割り当てるシートは設定した数までになり、残りのシートには手を付けません。その時間帯以外は、ジョブがすべてのシートを使用できます。

予約は 1 つのベンダーと、そのベンダーの 1 つ以上のフィーチャーを対象とし、期間からなるスケジュールを持ちます。各期間では、指定したサーバーごとに、LicOps がそのサーバーで割り当てられるシートの最大数を設定します。

:::note[予約で制限される内容]

各期間は、LicOps が割り当てるシートに上限を設けます。期間が有効な間、LicOps はサーバー上で **Maximum seats** を超えて許可することはなく、**Blocked during this period** のサーバーでは何も許可しません。

:::

**Reserved seats** は予約とともに保存されますが、LicOps はライセンスサーバー上でそれらのシートを確保しません。そのため、LicOps を経由せずにチェックアウトするユーザーは、それらのシートも使用できます。そのようなユーザーのためにシートを空けておくには、**Maximum seats** をサーバーの総数より小さく設定してください。

## 予約を作成する

予約を作成するには、次の手順を実行します。

1. OpenLM Platform で **Navigation** を選択し、**Licenses and Features** の下にある **LicOps Configuration** を選択します。
2. **Rules**、**New Reservation** の順に選択します。
3. **Pool** で **Vendor** を選択し、続いて 1 つ以上の **Features** を選択します。LicOps はフィーチャーごとに 1 つの予約を保存し、それらはすべてここで設定したスケジュールを共有します。1 つのフィーチャーに設定できる予約は 1 つだけです。
4. **Schedule** で **Period 1** を設定します。
   - 期限なく適用する制限には **Applies all day, every day** をオンにし、時間帯を指定する場合は **From** と **To** を設定します。08:00 から 18:00 のような時間帯は毎日適用されます。18:00 から 08:00 のような時間帯は午前 0 時をまたぎます。
   - **Servers not in the list** では、他のサーバーを制限しない場合は **No limit** を選択します。期間が有効な間、それらのサーバーで LicOps がこのフィーチャーをまったく割り当てないようにする場合は **Blocked during this period** を選択します。
   - 上限を設けるサーバーごとに **+ Add server** を選択し、**Maximum seats** を設定します。これは、期間中に LicOps がそのサーバーでこのフィーチャーを割り当てるシートの最大数です。**Maximum seats** は `1` 以上で、サーバーのライセンスシート数以下です。**Reserved seats** は予約とともに保存される値で、`0` 以上、**Maximum seats** 以下です。LicOps はライセンスサーバー上でこれらのシートを確保しません。
5. 別の時間帯を追加するには、**+ Add period** を選択します。期間を重複させることはできません。
6. **Save rule** を選択します。

どの期間が有効かを確認するには、**Currently active** を確認します。これはお使いのコンピューターの時計に基づきます。LicOps 自体は動作しているマシンの時計で判断するため、結果が異なることがあります。[スケジュールをタイムゾーンに合わせる](#スケジュールをタイムゾーンに合わせる)を参照してください。

次のスクリーンショットは、日中と夜間の期間を持つ予約を示しています。

*日中と夜間の期間を持つ予約。Currently active には、お使いのコンピューターの現地時刻で有効な期間が表示されます。*

予約は、アドミッションルールとともに **Rules** リストに、アクション **Reserve seats per server for time periods** として表示されます。変更または削除するには、そこで予約を選択します。

## 期間中の動作

LicOps は 1 分ごとにスケジュールを確認します。期間が始まると、それ以降の新しいリクエストにその制限が適用されます。期間が終わると制限が解除されるか、次の期間の制限に切り替わります。LicOps が各状況で行う動作を次の表に示します。

| 状況 | LicOps の動作 |
| --- | --- |
| リストにあるサーバーが **Maximum seats** に達していない | 通常どおり許可します。 |
| リストにあるサーバーが **Maximum seats** に達した | 新しいリクエストをプール内の他のサーバーに配置します。 |
| リストにないサーバーで、**No limit** が選択されている | 通常どおり許可します。 |
| リストにないサーバーで、**Blocked during this period** が選択されている | これらのフィーチャーについて、そのサーバーには何も配置しません。 |
| 空きシートのあるすべてのサーバーが、上限に達しているかブロックされている | `ConstraintBlocked` でリクエストを拒否します。 |

**Maximum seats** で数えるのは、LicOps が割り当てたシートだけです。ユーザーがライセンスサーバーから直接チェックアウトしたシートはこれに含まれませんが、サーバーの空きシートは減ります。

期間が始まっても、シートが回収されることはありません。新しい最大数を超えるジョブがすでにサーバー上で実行中の場合、それらのジョブはシートを保持し、十分な数のジョブが終了するまで、LicOps はそのサーバーで新しいジョブを許可しません。

予約はアドミッションルールと併せて機能します。ルールは、LicOps がシートをどこに配置したいかを決めます。予約は、サーバーにまだ上限内の余裕があるかどうかを決めます。

## スケジュールをタイムゾーンに合わせる

LicOps は、動作しているマシンから時刻を読み取ります。Docker では、タイムゾーンを指定しない限りコンテナーは UTC で動作するため、現地時刻の 08:00 のつもりで設定した期間が、数時間早く、または遅く始まることがあります。`routerapi` の環境変数にタイムゾーンを追加します。

```yaml
      - TZ=Europe/Berlin
```

続いて、`docker compose up -d routerapi` でコンテナーを再作成します。アドミッションルールの **time of day** 条件にも同じことが当てはまります。

## 有効な制限を確認する

各サーバーの上限をシート数と並べて確認するには、可用性レポートを確認します。

```bash
curl http://localhost:8100/api/v1/admission-controller/availability
```

各サーバーには `constraints` が表示され、上限が `limit`（`9223372036854775807` は上限が適用されていないことを示します）、その上限の範囲で LicOps が保持しているシートが `held`、残りが `headroom` として示されます。空きシートはあるのに上限までの余裕がないサーバーがあることが、リクエストが `ConstraintBlocked` で拒否された理由です。[OpenLM LicOps を運用する](https://www.openlm.com/documentation/ja/cloud/deployment-operations/licops/operations#リクエストが拒否された理由を調べる)を参照してください。
