systemd サービスが自身を更新することは可能ですか?

systemd サービスが自身を更新することは可能ですか?

完璧なサーバーの皆さん、

自分自身を更新できる systemd サービスを書きたいと思います。

具体的には、5 分ごとに Amazon S3 でバイナリとファイルの新しいバージョンを確認します.service。更新されている場合は、ダウンロードして置き換えてから、再起動します。

残念ながら、systemd では使用中のファイルの変更は許可されないようです。

これを実現するための標準的な方法はありますか?

ありがとう!

編集: 明確にするために、私はこれを単一のサービスで実行できるかどうかを尋ねています。相互に更新するサービスのペアを持つことはできると思いますが、それは洗練されていないようです。

答え1

systemd .service ファイルまたはプログラム実行可能ファイルに関連するファイルの更新は、他のファイルの更新と同じです。

実際には、Ansible などの構成管理を使用してこれを行う必要がありますが、現状のまま実行するには、一般的なワークフローとして、次の操作を実行する bash/python スクリプトを使用できます。

  1. Web サーバー/s3/その他からファイルを取得します。
    • 簡単なmd5sumチェックを実行して相違点を比較することができます。または、日付やその他のメタデータを比較して、ファイルが新規か変更されたかを判断します。
  2. 必要に応じてファイルを置き換えます
    • ファイルが使用中の場合は、事前にstopサービス ( )を実行する必要がある場合があります。service <servicename> stop
  3. systemctl daemon-reload実行すると、systemd にサービス ファイルの変更を「再スキャン」するように指示します。
  4. 問題のサービスを再起動/開始します

その後、そのスクリプトを cron にロードするか、systemd タイマーとしてロードして、スケジュールに従って実行することができます。

関連情報