Unofficial
このページの内容
  1. 01Jobs ページ
  2. 02ジョブを新規作成する
  3. 03今すぐ実行、実行履歴、ログ
  4. 04組み込みジョブ
  5. 05通知
  6. 06Root 権限と他のアカウントが読める内容

NAS の定期ジョブ:ログと失敗通知付きの cron

Bucket & Code Server IDE の Jobs ページは、cron のスケジュールに従ってコマンドを実行し、各実行のログを保存します。ジョブは失敗時に QTS のシステムログへ通知できます。宛先を追加すれば Telegram、Discord、Slack、メールにも送信できます。

  1. スケジュールcron のフィールドと次回実行
  2. コマンドbash、root として実行
  3. 今すぐ実行実行とそのログ
  4. 組み込みパッケージ自身のジョブ
  5. 通知システムログとチャット

画像はテスト用 NAS のもので、バージョン 1.0.0-49 の表示を使用しています。Notifications の画像にあるアドレスは例です。

01Jobs ページ

ページには 2 つのタブがあります。Scheduled にはパッケージ組み込みと各アカウント作成の cron ジョブが表示されます。Operations には、インストールやデータ移動など、bvsd が実行した時間のかかる操作の直近 50 件が新しい順に表示されます。

Scheduled の各行には、ジョブと所有者、文章と式によるスケジュール、次回実行、有効・無効のスイッチが表示されます。行を開くとコマンド、実行履歴、ログを確認できます。上部のバッジは NAS のタイムゾーンを示し、ページ内の時刻はすべてそのタイムゾーンです。

定期ジョブ:system 所有の組み込みジョブ Backup(無効)、Empty the trash、Maintenance、Rotate nginx's logs、Toolchain catalog refresh、および ola 所有の Disk report(月曜日〜金曜日の 06:00)
  • 開発者はジョブを作成し、自分のジョブを変更・削除できます。管理者はすべてのジョブを変更できます。
  • ログイン済みのすべてのアカウントが一覧、コマンド、ログを読めます。閲覧者も同様です。

02ジョブを新規作成する

  1. New job を押し、Name に名前を入力します。
  2. Schedule に 5 フィールド(分 時 日 月 曜日)、先頭に秒を加えた 6 フィールド、または @daily、@hourly、@every 90m を入力します。下の例を選ぶと入力できます。その下にはスケジュールの説明と、NAS のタイムゾーンでの次回 5 回分が表示されます。CRON_TZ=Europe/London 0 3 * * * のような接頭辞で別のタイムゾーンを使えます。
  3. Command (bash) はターミナルに入力するのと同じように記述します。複数行は 1 つのスクリプトとして実行され、出力が実行ログになります。
  4. Runs は On the NAS または作成済みの環境を選びます。環境内ではそのシステムのツールとライブラリが見えます。Working folder はデータフォルダー内の projects/ からの相対パスまたは絶対パスです。空欄は projects/ を意味します。環境内では projects/ だけが /projects として見えます。
  5. Timeout in seconds を過ぎても実行中であれば停止し、タイムアウトとして記録します。新規ジョブの初期値は 3600 で、0 は無制限です。When the previous run is still going は Skip this run または Run it after the previous one を選びます。後者では待機できる実行は最大 1 件です。
  6. 新規ジョブでは Notify on failure と On がオンです。無効にしたジョブも設定は保持され、手動でのみ実行されます。Create the job を押します。
新規ジョブ:Name は Disk report、Schedule は 0 6 * * 1-5、月曜日〜金曜日の 06:00 と次回 5 回分を表示。Command は df -h /share/CACHEDEV1_DATA と date、Runs は On the NAS、Working folder は projects/、Timeout は 60、Skip this run を選択、Notify on failure と On はオン。Create the job ボタン

夏時間の切り替えがある夜は Debian cron の規則に従います。分または時フィールドが * または */N で始まるジョブ、@hourly、@every は経過時間に従います。秋は繰り返す時間帯の両方で実行され、春の飛ばされる時間帯は発生しません。その他のジョブは各予定時刻に 1 回実行されます。繰り返す時間帯の予定は 1 回、飛ばされる時間帯の予定は切り替え直後に実行されます。

03今すぐ実行、実行履歴、ログ

ジョブのダイアログにある Run now は、そのジョブが実行中でなければ、スケジュールとは別に即時実行します。ダイアログには各実行の開始、所要時間、結果、終了コードが表示されます。実行を選ぶと一覧の下にログが表示されます。

Disk report ジョブ:コマンド、NAS 上での実行、Timeout 1 min、次回はスキップ、失敗通知あり、所有者 ola。成功した実行 1 件、終了コード 0、df の出力と日付を含むログ
  • ログの最初と最後の行は bvsd が書き込みます。最初の行は実行とジョブ、開始時刻、開始元のアカウントまたはスケジュールを示します。この時刻は UTC ですが、実行一覧は NAS の時刻です。最後の行には結果と所要時間が表示されます。
  • ジョブは直近 100 回の実行を保持し、それぞれ出力の末尾 4 KB を保存します。実行の完全なログは 30 日間保持されます。
  • 失敗またはタイムアウトになると、一覧でジョブの隣に赤い last run failed が付きます。Overview の Jobs タイルでも failing に数えられます。
  • コマンドが終了しても、起動したバックグラウンドプロセスは動き続けます。タイムアウト、ジョブの削除、パッケージの停止では、実行のプロセスグループ全体に SIGTERM を送り、5 秒後に SIGKILL を送ります。
  • Edit はジョブを変更します。Delete は実行中の処理を停止し、ジョブと実行履歴、ログを削除します。これらのボタンは所有者と管理者だけに表示され、それ以外には Close が表示されます。

04組み込みジョブ

built in と表示されるジョブは bvsd 自身のもので、所有者は system です。

ジョブと実行時刻処理内容
バックアップ
既定は @daily
バックアップ ページで設定するバックアップ。そのページで Scheduled backups をオンにすると実行され、スケジュールとスイッチも同ページで管理します
メンテナンス
毎日 03:30
データフォルダー内の tmp/ から 10 日間変更のないものを削除し、10 MB を超えた log/audit.log をローテーションします
ゴミ箱を空にする
毎日 03:45
データフォルダー内の trash/ へ移動してから 7 日を超えたものを削除します。削除済みのリポジトリ、バケット、アカウントのホームフォルダーが対象です
ツールチェーンカタログの更新
毎日 04:15
署名付きツールチェーンカタログを取得し、署名が有効で新しい場合に使用します
nginx のログのローテーション
毎時 7 分
nginx-access.log または nginx-error.log が 20 MB を超えると .1 に名前を変更し、古いファイルを 5 つ保持して nginx にログを開き直させます

管理者は組み込みジョブのスケジュール、タイムアウト、実行中の動作、失敗通知を変更し、ジョブを無効にできます。名前、コマンド、環境、作業フォルダーは固定で、Delete はありません。

組み込みの Empty the trash:削除対象、Timeout 1 h 0 min、所有者 system、毎日 03:45 の実行はすべて成功、ログは trash: 0 removed, 226 kept。ボタンは Edit と Run now のみ

05通知

bvsd はすべての通知を QTS システムログへ書き込みます。System ページの Notifications は、shoutrrr URL を使ってチャットやメールにも送信します。Telegram、Discord、Slack、メール、Webhook などを利用できます。

  1. Addresses (shoutrrr URLs) で Add an address を押し、サービスごとに 1 つの URL を貼り付けます。たとえば telegram://<token>@telegram?chats=<chat id> または generic+https://example.com/hook です。
  2. Also sent to the addresses で、システムログだけに残す通知のチェックを外します。新規インストールでは 4 つともオンです。
  3. Save を押します。
Notifications:Also sent to the addresses の A job fails、A backup ends、A module restarts in a loop、The certificate がオン。サンプルの宛先 telegram://<token>@telegram?chats=<chat id>、Add an address と Save ボタン
スイッチ通知される条件
ジョブが失敗したとき失敗通知を有効にした cron ジョブが失敗またはタイムアウトになった場合、またはビルド、データ移動、インストールなどの操作が失敗した場合
バックアップが終了したときバックアップ、検証、復元が終了した場合。成功時も含みます。または定期バックアップを開始できなかった場合
モジュールが再起動を繰り返しているときプロセスが終了と再起動を繰り返す場合
証明書アップロード済み証明書の残りが 30 日以下になった場合、nginx が自己署名証明書へ切り替わった場合、または bvsd が新しい自己署名証明書を作成した場合
なし、常に送信起動時に設定が拒否された場合、未完了のデータ移動が見つかった場合、残っていたプロセスを終了した場合、または設定を書き込めなかった場合
  • 同じ件名の通知は、システムログを含め、10 分に最大 1 回送信されます。次の通知には抑制した件数が表示されます。
  • 各アドレスへの送信は個別で、制限時間は 10 秒です。失敗時には URL のスキームだけを記録します。残りの部分にはトークンが含まれるためです。
  • アドレスとスイッチを変更できるのは管理者だけです。他のアカウントにはスイッチと各 URL のスキームが表示されます。

NAS の管理者はパッケージの CLI ソケットからも宛先を設定できます。送信した一覧が既存の宛先を置き換え、スイッチの値は保持されます。

/usr/bin/bucketvs/bin/curl --unix-socket /usr/bin/bucketvs/var/run/bvsd-cli.sock \
  -X PUT -H 'Content-Type: application/json' \
  -d '{"notify":{"shoutrrr_urls":["telegram://<token>@telegram?chats=<chat id>"]}}' \
  http://bvsd/api/v1/settings

06Root 権限と他のアカウントが読める内容

  • ジョブのコマンドは root として実行されます。NAS 上でも環境内でも、作成者は問いません。開発者はジョブを作成できるため、NAS 上で任意のコマンドを root として実行できます。開発者ロールは NAS の root 権限を渡せる相手だけに付与してください。
  • ジョブは所有者が有効な開発者または管理者の場合だけ動きます(バージョン 1.0.0-52 以降)。所有者が無効、またはメンバー・閲覧者ロールの場合、各予定時刻は理由付きのスキップとして記録されます。たとえば its owner ola is disabled です。Run now も同じ理由を返し、実行中の処理は停止します。アカウントが有効になるか開発者に戻ると再開します。アカウントを削除すると、そのジョブ、実行履歴、ログも削除されます。組み込みジョブはアカウントの状態にかかわらず動作します。
  • ログイン済みのすべてのアカウントは、閲覧者も含め、すべてのジョブのコマンドと出力を読めます。パスワードやトークンをコマンドに書かず、データフォルダー内の etc/ に root だけが読めるファイルを作成し(chmod 600)、コマンドからそのファイルを読ませてください。