CURTIME=$(date '+%s')
LOG=/home/apache_logs.txt
FILETIME1=$(stat $LOG -c %Y)
TIMEDIFF1=$(expr $CURTIME - $FILETIME1)
Ubuntuでこのスクリプトを作成し、そこでうまく動作しますが、SunOS(Generic_150400-64 sun4v sparc sun4v)では動作しません。
このスクリプトはログが更新されていることを確認し、そうでない場合は TIMEDIFF1 の秒単位の出力に基づいてアクションを実行します。
elseがこのようなことをしている場合は、ログが15分前に更新された場合はこれを行い、30分前に更新された場合はこれを行います...など。
したがって、if else 文の効率的な操作のためには、秒単位の出力時間が非常に重要です。
それで、ファイルの寿命(修正/更新されたかどれくらいか)を秒単位で確認しようとします。数秒が必要です。
答え1
statの代わりに、次のPerl onelinerを使用できます。
perl -e 'print((stat("/tmp/a"))[10])'
現在の日付の問題を解決するには、touch
次のコマンドを使用して一時ファイルを作成し、一時ファイルから修正タイムスタンプを読み取ることができます。
touch /tmp/currtime
CURRTIME=$(perl -e 'print((stat("/tmp/currtime"))[10])')
FILETIME=$(perl -e 'print((stat("/path/to/log"))[10])')
DIFFTIME=$(($CURRTIME - $FILETIME))
echo "Time difference is $DIFFTIME seconds"
#cleanup
rm /tmp/currtime
perl stat() コマンドへの参照は以下にあります。https://perldoc.perl.org/functions/stat.html
答え2
SunOSシステムのバージョンがdate
このパラメータをサポートしていない場合は、+%s
次のようにawk
変更します。それ不可能ではありませんが、実用的ではありません。
効果的ですか?そうでなければ幸運ではありません。その場合は、次を使用して現在時刻を取得できます。stat filename -c %Y
tmpfile="/tmp/apache_test$$"
if [ -e "$tmpfile" ]
then
printf "%s exists; that’s odd.\n" "$tmpfile"
exit
fi
if ! { touch "$tmpfile" && CURTIME=$(stat "$tmpfile" -c %Y) && rm "$tmpfile";}
then
printf "Something went wrong.\n"
exit
fi
あなたのbashバージョンがそれをサポートしていない場合は、代わりに使用してください。[ -e filename ]
-f
PSすべての変数を引用する必要があります。
FILETIME1=$(stat "$LOG" -c %Y)
TIMEDIFF1=$(expr "$CURTIME" – "$FILETIME1")