cronでラズパイを定期的に再起動する

ラズパイを24時間稼働させぱなしにしておくと稼働させてる状態にもよりますが1ヶ月程度でハングアップしてしまうことがママあります
そこでラズパイを定期的に再起動するように設定します
再起動の設定にはcronを使用します

まずは再起動方法の確認

再起動のコマンドはこれ

$ sudo reboot 

もしくはこれ

$ sudo shutdown -r now 

コンソールで上記コマンド実行すると再起動するはずです

cronが動作するか確認しておく

ラズパイでスケジュール実行するのはcronってやつを使います、Windowsで言うタスクスケジューラみたいなやつです

cronデーモンが動いているか確認
$ systemctl status cron.service

f:id:keiaruesu:20211123165722p:plain
「active (running)」って表示されれば動いてます

タイムゾーンの確認

一応最初に確認しておくと後でトラブったときにスムーズに解決できるかもしれない

$ date

cronの設定開いてスケジュール登録する

cronのファイル編集してスケジュール登録します
コマンドはこれ

$ sudo crontab -e

初回起動時にはこんなメッセージが出てきて使用するエディタを選択できます
とりあえずnano選んでおけばいいと思います

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.tiny
  3. /usr/bin/code
  4. /bin/ed

Choose 1-4 [1]: 

nanoの編集画面で再起動のスケジュールを書き込んで保存します
f:id:keiaruesu:20211123183212p:plain

動作確認用に書き込んだ内容はこんな感じ

#16:25に再起動する
25 16 * * * /sbin/reboot

毎日16:25に再起動するというコマンドになります
さっきは「sudo reboot」でリブートしましたが
cronでは「/sbin/reboot」と書きます
保存は「ctrl+O」押したあと保存するファイル名を聞かれるので名前を変えずにエンターで保存します
閉じるときは「ctrl+X」です

動作確認

cronの中身確認

$ sudo crontab -l

cronのデーモン再起動

$ sudo /etc/init.d/cron restart

時間になって再起動が始まったら設定成功です

最終的な設定値

上記では動作確認のためとりあえず作業中の時間を指定していしていたので最終的に以下に設定しました

#毎週日曜日の4:00に再起動する
00 04 * * 0 /sbin/reboot

ログの設定

ログファイルは「/var/log/cron.log」にありますがファイルが無い場合ログの出力設定がされていない可能性があります
ログの出力設定は以下のファイルで設定します
「/etc/rsyslog.conf」

/etc/rsyslog.conf の一部抜粋

###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*			/var/log/auth.log
*.*;auth,authpriv.none		-/var/log/syslog
#cron.*				/var/log/cron.log
daemon.*			-/var/log/daemon.log
kern.*				-/var/log/kern.log
lpr.*				-/var/log/lpr.log
mail.*				-/var/log/mail.log
user.*				-/var/log/user.log


cronの所がコメント化されてますね
#外して保存すれば有効化されます

#cron.*				/var/log/cron.log
↓以下に変える
cron.*				/var/log/cron.log


設定変更後にデーモンの再起動を行います

sudo /etc/init.d/rsyslog restart

きっとこれで上手くいくでしょう

コマンドの解説とか

cronの書式

 * * * * * [実行コマンド]

「*」の部分にスケジュールする数値を入れます
左から順番に「分」「時」「日」「月」「曜日」となっています
ちなみに上記の状態だと1分毎にコマンドが実行されます

「sudo crontab -e」で編集しているファイルってどこにある?

以下のパスにありました

/var/spool/cron/crontabs/root

cronで使用するエディタを変更する

初回実行時に出てくるエディタの選択ですが
後から使用エディタ変えたいときは以下のコマンドで変更することが出来ます

$ select-editor