Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kei-s16/eb5eb5f6657e17eb8e9a422c167e62e0 to your computer and use it in GitHub Desktop.
Save kei-s16/eb5eb5f6657e17eb8e9a422c167e62e0 to your computer and use it in GitHub Desktop.
qiitaの下書きに入ってたやつ、時期を逸した感があるのでこっちに

概略

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]
Description=Restart ark-dedicated.service every wednesday

[Timer]
OnCalendar=Wed 12:00
Persistent=True

[Install]
WantedBy=timers.target

webhookで通知する

いちいち再起動するよーとかしたよーとか言うのもめんどうなので。

まずは試してみる

通知をしたいDiscordサーバのサーバ設定→ウェブフックからウェブフックを作り、webhook URLを取得します。

とりあえず下記コマンドで雑にメッセージを投げてみる。

curl -X POST -H 'Content-Type: application/json' -d '{"content" : "test"}' webhookのurl

再起動の開始と終了に合わせて通知を飛ばす

restart-ark-dedicated.serviceを再び編集し、ExecStartPreExecStartの実行前に、ExecStartPostExecStartの実行後に走らせるコマンドをそれぞれ指定します。

[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時間前に通知するようにしましょう。

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment