移植 : https://gist.github.com/kei-s16/eb5eb5f6657e17eb8e9a422c167e62e0
概略
systemdのユニットを定期的に再起動するために
- 再起動用のサービスユニット
- 上記ユニットのタイマーユニット
を作成し、ついでに実行時にwebhookを使ってDiscordに通知を飛ばす
前提とかおことわりとか
- Indigo(6vCPU, 8GB)上のUbuntu 18.04で動かしています。
- 今回定期的に再起動したいサービスユニットは、 ARKのプライベートサーバ
- 上記のサービスユニットをこの記事では(wikiと同じく)
ark-dedicated.serviceという名前で登録しています。別名で登録している場合や別のユニットを対象とする場合は適宜読み替えてください。 - systemdまわりめちゃくちゃ浅い理解で書いてます。
- コケたときのことはなにも考えてません。
まずは定期的に再起動するように
再起動用のサービスユニットを作る
[Unit]タイマーユニットを作る今回は誰も遊んでいないであろう毎週水曜日正午に再起動処理を実行することにします。
Description=Restart ark-dedicated.service
[Service]
Type=oneshot
ExecStart=/bin/systemctl try-restart ark-dedicated.service
[Unit]webhookで通知するいちいち再起動するよーとかしたよーとか言うのもめんどうなので。
Description=Restart ark-dedicated.service every wednesday
[Timer]
OnCalendar=Wed 12:00
Persistent=True
[Install]
WantedBy=timers.target
まずは試してみる
通知をしたいDiscordサーバのサーバ設定→ウェブフックからウェブフックを作り、webhook URLを取得します。
とりあえず下記コマンドで雑にメッセージを投げてみる。
curl -X POST -H 'Content-Type: application/json' -d '{"content" : "test"}' webhookのurl再起動の開始と終了に合わせて通知を飛ばすrestart-ark-dedicated.serviceを再び編集し、ExecStartPreでExecStartの実行前に、ExecStartPostでExecStartの実行後に走らせるコマンドをそれぞれ指定します。
[Unit]おわりにこのままだと再起動開始通知から速攻で再起動処理が動くのであんまりよくない。
Description=Restart ark-dedicated.service
[Service]
Type=oneshot
ExecStartPre=/usr/bin/curl -X POST -H 'Content-Type: application/json' -d '{"content" : "[定期]サーバ再起動開始"}' webhookのurl
ExecStart=/bin/systemctl try-restart ark-dedicated.service
ExecStartPost=/usr/bin/curl -X POST -H 'Content-Type: application/json' -d '{"content" : "[定期]サーバ再起動完了"}' webhookのurl
人に優しくありたいなら30分とか1時間前に通知するようにしましょう。