Raspberry Pi Zero WHに4Gモジュールを接続する3にて、OS起動時から規定経過時間以内に、PPP接続できなかった場合、OSリブートするように仕込みました。その仕込み先は、シェルスクリプトですが、規定経過をどのように判定したかを解説します。
通常、シェル内で現在時や取得できますが、OS起動からの経過時刻を取得するコマンドが見つかりませんでした。..しかし、 pythonでは組みたくない。言われてみるとWindowsにもないような... .困りました...そうだ 新しいコマンドを作ってしまえばいい。
OS起動からの経過時刻は、カーネルシステムコール:times() です。コマンドのソースコードは以下の通りです。ラズパイでは単位はmsecになるようです。
#include <stdio.h> #include <sys/times.h> #include <memory.h> struct tms tmwk; int main(int ac, char **av) { printf("%lu\n", times( 0 ) ); }
デバック不要なので、コマンドラインで一回だけビルトします。
cc -o passtime passtime.c
このpasstimeコマンドを、シェルから ` …` で呼出し、シェル変数に取り込みます。
START_10MSEC=`passtime` while [ 1 ];do NOW_10MSEC=`passtime` PASS_10MSEC=$(( $NOW_10MSEC - $START_10MSEC )) # pass 5 min if [ $PASS_10MSEC -gt 30000 ];then shutdown -r now fi # under flow timer if [ $PASS_10MSEC -lt 0 ];then shutdown -r now >> $ASAHI_LOG fi
一応、アンダーフロー時も処置しておきます。