自動リブート


Linux マシンなのに定期的にリブートしないと正常動作しないというのは 情けない話。

以前は /usr/local/PCast/DbAcRap GetMergeListBottom を使って 予約リストを調べ、予約録画中でなければリブートしようと考えていた。
今、予約中かどうかの判断を考えると結構面倒くさい(汗)ので、 /usr/local/PCast/DbAcRap GetDeviceStatus を使って WAIT であればリブートすることにした。
ただし、1分後に予約録画が始まる可能性があるので、

  • 朝の 4:57 から予約録画が始まる可能性は低いであろう

  • もし 5:00から予約があっても4分あればリブートしてくるだろう

  • と割りきって、
  • 朝 4:56 に cron からスクリプトを起動し

  • /usr/local/PCast/DbAcRap GetDeviceStatus を使って Device=0 の状態 を見て、

  • WAIT, NODEVICE, ERROR だったらリブートする

  • ことにした。
    Device=0 の状態として NODEVICE, ERROR を含めたのは、 それらを経験したからである(怒)。 これらは、LinkStation の再起動だけでは回復しないかも (PC-MV7DX/U2 の再起動が必要かも)しれないが。

    自動再起動スクリプト

    以下を /usr/local/sbin/Reboot.sh として作成した。
    #! /bin/sh
    
    STATUS=`/usr/local/PCast/DbAcRap GetDeviceStatus | sed -n -e 's/^.*Device=0 Status=\(.*\)$/\1/p'`
    date >> /tmp/Reboot.log
    echo $STATUS >> /tmp/Reboot.log
    
    case "$STATUS" in
            NODEVICE|ERROR|WAIT)
            echo reboot
    
            echo -n 'CCCC' > /dev/ttyS1
            /sbin/reboot
            ;;
    esac
    

    cron への登録

    crontab -e で以下を追加
    56 4 * * * /bin/sh /usr/local/sbin/Reboot.sh 2>/dev/null 1> /dev/null
    

    とりあえず昨日のリブートはうまくいったようだ。

    [root@link /root]# last | head
    	:
    reboot   system boot  2.4.17_mvl21-san Mon Jun 27 04:56          (13:35)
    	:
    



    DbAcRap
    ハックの記録
    LinkStation/玄箱 をハックしよう

    PC-MV7DX/U2 ファームウェア

    Copyright (C) 2005 Yasunari Yamashita. All Rights Reserved.
    yasunari @ yamasita.jp 山下康成@京都府向日市