はい。Host cronまたはsystemdタイマーからワンショットのコンテナコマンドを実行できますが、アプリケーションの環境、ID、ネットワーク、ロックのルールを再現する必要があります。
セルフホストアプリで、アプリケーションコンテナにcronデーモンを追加せず、定期的なクリーンアップ、インデックス作成、エクスポート、バックアップが必要になると、これは実際の互換性の問題になります。まずは使い捨てのパスまたはアカウントから始め、以前の動作状態を利用できるようにしておきます。そして、一度きりの接続テストではなく、元のワークロードに基づいて設計を評価します。
スケジュールとライフサイクルの契約を定義する
サポートされる構成は、同じプロジェクト設定で起動される、べき等なワンショットコマンドです。対立する構成は、環境、作業ディレクトリ、ロック、またはサービスの準備状態が欠けたホストジョブです。どちらの構成を変更する前にも、バージョン、ID、アドレス、マウントパス、権限、現在観測できる状態を記録します。
関連するコンテナexecの動作が、最初の互換性の境界を定めます。これを使って主張の範囲を限定し、文書化された機能が設計全体の動作を証明すると考えるのではなく、この正確なホームサーバー上で同じ動作を検証します。
テスト前に判定ルールを記述します。成功とは、ジョブが目的のサービスに到達し、安全でない重複実行を拒否し、想定したボリュームに書き込み、目に見えるゼロ以外の失敗を出力することです。失敗には、コマンドが別のプロジェクトを使用する、シークレットを失う、依存関係の準備前に開始する、または2つの実行が同じ状態を変更する場合が含まれます。これにより、部分的な接続や正常なコマンド終了を、エンドツーエンドの互換性と誤認することを防げます。
本番と同じIDでジョブを実行する
管理された1つの判別テストを使います。スケジュール対象のホストユーザーとして正確なコマンドを手動で実行し、環境と終了ステータスを取得してから、重複する使い捨て実行を2つトリガーします。クライアント、ワークロード、ファイルセット、アカウント、タイミングを一定に保ち、変更されたコンポーネントだけがもっとも妥当な原因になるようにします。
crontabの環境ルールを使い、この経路で重要になる2つ目の観測対象を選びます。トランザクションの両側を取得します。リゾルバーまたはルート、ネゴシエートされたプロトコル、プロセスID、終了ステータス、レイテンシ、転送バイト数、リカバリーイベントを記録します。
タイトルで示されたライフサイクルイベント後、つまり再作成、再接続、再マウント、再起動、フェイルオーバー、またはクライアント変更の後にテストを繰り返します。古いソケット、キャッシュ、または認証情報が有効な間だけ動作する設計は、合格していません。
cd /srv/app && flock -n /run/app-job.lock docker compose exec -T app app-cli job
重複実行、障害、終了状態を解釈する
合格: ジョブが目的のサービスに到達し、安全でない重複実行を拒否し、想定したボリュームに書き込み、目に見えるゼロ以外の失敗を出力することです。この状態を生み出した正確なバージョンとトポロジーを保存します。結論がプロトコルのすべての実装ではなく、その条件に適用されるためです。
不合格: コマンドが別のプロジェクトを使用する、シークレットを失う、依存関係の準備前に開始する、または2つの実行が同じ状態を変更する場合です。どちらの主要な分岐に原因があると判断する前に、DNS、MTU、ID、ファイアウォール状態、ストレージレイテンシ、キャッシュされたセッションなどの共有依存関係を確認します。
例外: スケジュールを無効にし、以前のジョブ定義を復元して、明示的なプロジェクトパス、ロック、タイムアウト、ヘルスチェックを追加します。再現可能な観測によってどの境界が失敗したかを特定するまでは、権限を拡大したり、元データを削除したり、転送セキュリティを弱めたり、動作しているストレージを置き換えたりしないでください。
最初の実行ではなく、次回のスケジュール実行を検証する
観測された分岐に対応するアクションだけを適用し、その後、元のワークロードを再実行します。2回の関連するライフサイクルサイクルと想定される同時負荷の下で、ジョブが目的のサービスに到達し、安全でない重複実行を拒否し、想定したボリュームに書き込み、目に見えるゼロ以外の失敗を出力する場合にのみ、設計を維持します。
サービスの再起動ポリシーを使い、もっとも近い依存ワークフローを検証します。新しい設計が有効な間も、そのアクセス、タイミング、リカバリー動作は変わらない必要があります。
コマンドが別のプロジェクトを使用する、シークレットを失う、依存関係の準備前に開始する、または2つの実行が同じ状態を変更する場合は、停止して保存した状態に戻します。別の回避策を追加するのではなく、タイムスタンプ、正確なバージョン、ルートまたはマウントの証拠、最小限の再現手順を添えてエスカレーションします。
コンテナのヘルスチェックと結果を照合し、リスクが別のネットワーク、ID、バックアップ、またはストレージレイヤーに移っただけにならないようにします。
したがって、ホストでスケジュールするコンテナジョブについての適切な回答は、冒頭の判断であって、無条件の「はい」ではありません。観測可能な合格状態が受け入れの基準であり、不合格状態がロールバックの基準です。
よくある質問
cronではdocker execとdocker compose runのどちらを使うべきですか?
実行中のサービス内でコマンドを実行する場合はexecを使います。イメージが分離されたジョブコンテナをサポートしている場合は、ワンショットのrunを使います。
スケジュールジョブのログはどこに保存すべきですか?
標準出力と標準エラー出力を、保持されるホストログまたは監視パスに送り、ゼロ以外の終了を通知します。
アプリを更新するとどうなりますか?
タイマーを一時停止するかゲートを設け、マイグレーション、バックアップの凍結、またはコンテナの置き換えと重複しないようにします。
サポートとヒント
もっと読む

セルフホスト型ギャラリーでApple Live Photoのペアリングを保持できますか?
Apple Live Photoのペアリングに関する条件付きホームサーバー判断ガイド。管理されたテスト、結果の解釈、ロールバック、そして要点を絞ったFAQを含みます。

Google Takeoutとスマートフォンのバックアップを1つの写真ライブラリに取り込めますか?
写真の一括取り込みに関する条件付きホームサーバーの判断、管理されたテスト、結果の解釈、ロールバック、要点を絞ったFAQ。

Immichはファイルの所有権を取得せずに外部ライブラリを使用できますか?
Immichの外部ライブラリ所有権に関する条件付きホームサーバー判断ガイド。管理されたテスト、結果の解釈、ロールバック、要点を絞ったFAQを含みます。

