2019-10-29に更新

systemd/timerを使ってサーバを毎晩リブートさせる

サーバを定期的に再起動したいという需要は常に存在します。

どっかの誰かが開放し忘れたコードにより徐々に減っていく空きメモリ。原因を追求するより、定期的に再起動しちゃえば一発解決だよね🧙

なんか時々落ちるこのサービス、いっそ定期的にサーバを再起動しておけば、たとえ落ちたとしても復活するから、大体の時間は動いてるサービスにできるんじゃないの?😈

いいことか悪いことか、かっこいいかどうかはともかくとして、定期的にサーバを再起動しておけば解決できるある種の問題が存在することは事実です。問題の先送りだって一つの技術力ですし(後ろめたいときって前置きが長くなるよね)

ともかくそういうわけで何らかの理由でサーバを定期的に再起動させたいときの設定です。

CentOS7から標準になったSystemdのTimer機能を使います

serviceの作成と登録

$ sudo nano /etc/systemd/system/reboot.service
[Unit]
Description=Scheduled Reboot

[Service]
Type=simple
ExecStart=/usr/bin/systemctl --force reboot

こうやって出来たserviceファイルを

sudo systemctl enable reboot

で登録します。

この段階で、

sudo systemctl start reboot

ってたたいてあげると、サーバが予告なく再起動するかと思います。

Q: rebootコマンドじゃないの?
A: rebootとかhaltはCentOS7から非推奨になりました
10.4. システムのシャットダウン、サスペンド、休止状態 Red Hat Enterprise Linux 7 | Red Hat Customer Portal

Timerの作成と登録

serviceの作成と登録

$ sudo nano /etc/systemd/system/reboot.timer
[Unit]
Description=schedule reboot

[Timer]
Unit=reboot.service
OnCalendar=*-*-* 5:30:00

[Install]
WantedBy=timers.target

この例では毎朝5:30に再起動する記述になっています

sudo systemctl enable reboot.timer
sudo systemctl start reboot.timer

で登録します。

$ sudo systemctl list-timers --all
NEXT                         LEFT          LAST                         PASSED   UNIT                         ACTIVATES
Tue 2019-10-29 17:04:33 JST  4min 59s left n/a                          n/a      systemd-tmpfiles-clean.timer systemd-t
Wed 2019-10-30 05:30:00 JST  12h left      n/a                          n/a      reboot.timer                 reboot.se
n/a                          n/a           n/a                          n/a      systemd-readahead-done.timer systemd-r

という具合に、次の5:30にrebootが予定されていれば出来上がりです。よい再起動ライフを!

Originally published at qiita.com

daisuke furukawa

おひるねのできるフリーランサー。「モバイラーズオアシス」の中の人でもあります。

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント