永続unitファイルを作らず、現在から10分後に/usr/local/bin/check-onceを一度起動する。
systemdのtransient timerを使う。
適切なコマンドはどれか。
systemd-runの--on-active=はtransient timerが有効になってからの相対時間を指定し、一度きりの遅延実行を作れる。
詳細解説
systemd-run --on-calendar=10m /usr/local/bin/check-once--on-calendarはcalendar表現用で、現在からの相対10分には--on-activeが適する。
誤り。--on-calendarはcalendar expressionを受け取るため、現在を起点とする10mの相対delayには--on-activeを使う。
systemd-run --remain-after-exit=10m /usr/local/bin/check-once--remain-after-exitはservice終了後のactive状態に関係し、起動時刻を指定しない。
誤り。--remain-after-exitはtransient serviceの終了後状態を扱い、10分後という起動triggerを定義しない。
systemctl --on-active=10m /usr/local/bin/check-once一時timerを作成するsubcommandはsystemd-runであり、systemctlへこの形では指定しない。
誤り。--on-activeを受けてtransient timerを作るのはsystemd-runであり、systemctlをcommand実行器としてこの形では使わない。
systemd-run --on-active=10m /usr/local/bin/check-once現在のtransient timer有効化時点から10分後にcommandを起動する。
正しい。systemd-runが一時serviceとtimerを作り、--on-active=10mがtimer有効化から10分後の一度きりの起動を予定する。
実際に確かめる
一時的な検証環境で実行できる例です。
systemd-run --help 2>&1 | grep -E -- '--on-active|--on-calendar' | head -n 2期待される結果
--on-activeまたは--on-calendarのtimer option説明理解のポイント
- systemd-runはtransient unit
- --on-activeは相対時間
- unitファイル不要
確認時の注意
- 確認環境: systemd-run helpの読取のみ
- 検証ではtransient unitを作成せずhelpだけを読む。
基礎のおさらい
transient unit
unit fileを永続配置せずruntimeにunitを生成でき、短期的な遅延実行や管理作業に使える。
相対と暦
現在からのdelayは--on-active、特定の曜日・日時は--on-calendarのように目的でtriggerを分ける。