2つのサービススナップショットがあります。
- スナップショットを作成する
- スナップショットを送信
2番目(送信)は常に後で実行最初の項目(作成済み)が完了しました。現在、そのタイプのサービスがoneshot
同時に実行されています。
サービスは次のように定義されます(次の例で使用される正確なコマンドはこの質問には重要ではなく、詳細な要件は[例]の下に提供されています)。
- スナップショットを作成するサービス(
pyznap.service
):[Unit] Description=Create ZFS snapshots Documentation=man:pyznap(1) Requires=local-fs.target After=local-fs.target [Service] Type=oneshot ExecStart=/usr/bin/pyznap snap
- スナップショットを送信するサービス(
pyznap-send.service
):[Unit] Description=Send ZFS snapshots Documentation=man:pyznap(1) Requires=local-fs.target network-online.target After=local-fs.target network-online.target pyznap.service [Service] Type=oneshot ExecStart=/usr/bin/pyznap send
現在は、別々の(そして独立した)タイマーによってトリガーされます。
- スナップショット作成タイマー(
pyznap.timer
):[Unit] Description=Run pyznap snap every 15 minutes [Timer] OnCalendar=*:0/15 Persistent=true [Install] WantedBy=timers.target
- スナップショット転送タイマー(
pyznap-send.timer
):[Unit] Description=Run pyznap send every 15 minutes [Timer] OnCalendar=*:0/15 Persistent=true [Install] WantedBy=timers.target
その他の注意:
- 質問には以下が含まれます。「タイマーを使用するように複数のシステムサービスを構成する方法は?ただし、このソリューションは依然としてサービスを同時に実行します。
systemd
デザインによると、1つのサービスしか参照できませんTimer.Unit
。- さまざまな要件のためにデバイスが分離されました。
- 「送信」サービスにのみネットワークが必要です。
- 「生成」サービスもネットワークなしで実行する必要があります。
- 要件が満たされない場合は、このサービスをスキップできます。
- 「送信」サービスが実行されている必要があります。直後以前の「作成」サービスです。
- タイマーが1つしかない場合:
- スナップショット作成サービスもネットワークなしで実行する必要があるため、タイマーはトランスポートスナップショットサービスのみを有効にできません。
- ただし、後でスナップショットトランスポートサービスを直接実行する方法がある場合、タイマーはスナップショット作成サービスのみを有効にできます。
- 初めてスナップショットサービスを作成するのにどれくらいの時間がかかるのかわかりません。
答え1
systemd
主な問題は、最初のサービスが正常に開始されるとすぐに2番目のサービスを開始する方法のようです。完了したらどうすればよいかはわかりませんが、pyznap.service
実際にpyznap-send.service
スナップショットを送信するためのネットワーク接続が不足しているため、複雑な再試行ロジックを使用する予定がないとします。
この場合、2番目のサービスを省略し、次のようExecStartPost
に呼び出されるサービスに行を追加することを検討できます。pyznap.service
pyznap
send
ExecStartPost=/usr/bin/pyznap send
またはsystemd
、機能をさらに制御するには、機能を定義できますが、次のpyznap-send.service
文を使用して有効にすることができます。pyznap.service
ExecStartPost
ExecStartPost=/usr/sbin/systemctl start pyznap-send.service
この場合、開始行が呼び出されたときに「開始済み」として登録されていない可能性があるため、ファイルAfter=pyznap.service
からそのステートメントを削除する必要があります。pyznap-send.service
pyznap.service
ExecStartPost
pyznap-send.service