はじめに
Amazon Linux 2で運用しているサーバーをyum updateで更新したが、アクセス数が低い夜中に再起動したくなった。
そこで以下の設定をcronに設定する。
crontab -e
0 5 * * * reboot
しかし次の日確認したら再起動されていなかったので、その確認方法・対応方法をメモとして残しておく。
結論
rebootコマンドを絶対パスで指定する。
crontab -e
0 5 * * * /usr/sbin/reboot
確認方法
これまで他のディストリビューションで実施した際は問題なかったのでなんで???と思ったが、cronではPATHが通っていないことがあるので、まずはPATH環境変数の確認。そこで以下を実施。
crontab -e(cronでPATH環境変数出力)
MM HH * * * echo $PATH > /root/cron.log
※上記MMは数分後にしておいた方が吉。1分後だと間に合わないケースも。
↑で出力された/root/cron.logを確認。
cronのPATH環境変数
# cat /root/cron.log
/usr/bin:/bin
ふむふむ。
rebootはどこ?
whereis
# whereis reboot
reboot: /usr/sbin/reboot /usr/share/man/man2/reboot.2.gz /usr/share/man/man8/reboot.8.gz
ということで予想通りPATHが通っていないことが判明。
対応方法その1
crontab -e
export PATH=$PATH:/usr/sbin
0 5 * * * reboot
上記のようにcrontab -eで開いた後に、冒頭でPATH環境変数に/usr/sbinを設定する。
対応方法その2
crontab -e
0 5 * * * /usr/sbin/reboot
冒頭の「結論」でも記載したがrebootコマンドを絶対パスで指定する。
今回はこちらの方法で対応。
無事に再起動した。