#
# The cron bot is expected to run once a minute
+# Name of snapshot tag file for "important" snapshots. Format:
+# $CNO .... one line for each $CNO that should be preserved as snapshot
+# chcp ss $CNO && echo $CNO >> $NAMELIST
+NAMELIST=/etc/nilfs2sss.list
+
# The hour-of-day to preserve as daily snapshot
KEEPHH=12
MARK=( )
function marksnap() {
if [[ "${MARK[0]}" == "$1" ]] && [[ "${MARK[1]}" = "$2" ]] ; then
- chcp cp $DEV ${MARKYEAR[2]}
+ if [ -r "$NAMELIST" ] && grep -q ^$3 "$NAMELIST" ; then
+ : # Don't change important snapshots
+ else
+ chcp cp $DEV ${MARK[2]}
+ fi
fi
- MARK=( "$1" "$2" $3 )
-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" ]]
- marksnap MONTH "${DATE:5:2}" $CNO
- elif [[ "$TS" > "$WEEKLY" ]]
- # For older than most recent week, keep last snapshot each week
- marksnap WEEK "$(( 7${DATE:8:2} / 7 - 100 ))" $CNO
- elif [[ "$TS" > "$DAILY" ]]
- marksnap DAY "${DATE:8:2}" $CNO
- elif [[ "$TS" > "$HOURLY" ]]
- 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
+ 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