- # Within last month
- if [[ "$TS" < "$WEEKLY" ]] ; then
- if [[ "$KEEPDD" = "${DATE:8:2}" ]] ; then
- if [ -z "$KEEPWW" ] ; then
- KEEPWW="${DATE:8:2}"
- continue
- fi
- echo "# discard duplicate day $KEEPDD: $CNO $DATE $TIME" >&2
- else
- echo "# discard not day $KEEPDD: $CNO $DATE $TIME" >&2
- fi
- chcp cp $CNO
- continue
- fi
- # Within last week
- if [[ "$TS" < "$DAILY" ]] ; then
- [[ "$KEEPHH" = "${TIME:0:2}" ]] && continue
- echo "# discard not hour $KEEPHH: $CNO $DATE $TIME" >&2
- chcp cp $CNO
- continue
- fi
- # Within last day
- if [[ "$TS" < "$HOURLY" ]] ; then
- if [ "$KEEP55" = "${TIME:0:2}" ] ; then
- echo "# discard duplicate for hour $KEEP55: $CNO $DATE $TIME" >&2
- chcp cp $CNO
- else
- KEEP55="${TIME:0:2}"
- #echo "# keep first of hour $KEEP55: $CNO $DATE $TIME" >&2
- fi
- continue
- fi
- # Within last hour
- #echo "# keep within last hour $CNO $DATE $TIME" >&2
- [[ "$TS" < "$FIVELY" ]] && continue
- echo "$CNO $DATE $TIME is within last five minutes"
- #echo "# $CNO is within last five minutes " >&2
-done | if read X ; then
- :
-else
- date "+# new snapshot at %Y-%m-%d %H:%M:%S" >&2
- mkcp -s $DEV
-fi
+ MARK=( "$1" "$2" "$3" )
+}
+
+{ flock 9
+
+ date "+$DEV: %Y-%m-%d %H:%M:%S ---- checking" >&2
+ lscp -s $DEV | while read CNO DATE TIME REST ; do
+ TS="$DATE $TIME"
+ [ "$CNO" = "CNO" ] && continue
+ if [[ ! "$TS" > "$YEARLY" ]] ; then
+ marksnap YEAR "${DATE:0:4}" $CNO
+ elif [[ ! "$TS" > "$MONTHLY" ]] ; then
+ marksnap MONTH "${DATE:5:2}" $CNO
+ elif [[ ! "$TS" > "$WEEKLY" ]] ; then
+ # For older than most recent week, keep last snapshot each week
+ marksnap WEEK "$(( 7${DATE:8:2} / 7 - 100 ))" $CNO
+ elif [[ ! "$TS" > "$DAILY" ]] ; then
+ marksnap DAY "${DATE:8:2}" $CNO
+ elif [[ ! "$TS" > "$HOURLY" ]] ; then
+ marksnap HOUR "${DATE:8:2}-${TIME:0:2}" $CNO
+ else
+ echo "$CNO $DATE $TIME within last hour"
+ fi
+ done | if read X ; then
+ : # snapshot within last hour
+ else
+ date "+$DEV: new snapshot at %Y-%m-%d %H:%M:%S" >&2
+ mkcp -s $DEV
+ fi
+} 9> /var/run/lock/sss.lock