サーバを定期的に再起動したいという需要は常に存在します。
完璧に書かれたシステムにおいてメモリが一方的に減っていくなんてことはおこらないはずですが、どっかの誰かが開放し忘れたコードにより徐々に減っていく空きメモリ。原因を追求するより、定期的に再起動しちゃえば一発解決だよね🧙
なんか時々落ちるこのサービス、いっそ定期的にサーバを再起動しておけば、たとえ落ちたとしても復活するから、大体の時間は動いてるサービスにできるんじゃないの?😈
いいことか悪いことか、かっこいいかどうかはともかくとして、定期的にサーバを再起動しておけば解決できるある種の問題が存在することは事実です。問題の先送りだって一つの技術力ですし(後ろめたいときって前置きが長くなるよね)
ともかくそういうわけで何らかの理由でサーバを定期的に再起動させたいときの設定です。
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が予定されていれば出来上がりです。よい再起動ライフを!