This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
backup_script [2025/05/02 22:09] – thilo | backup_script [2025/05/06 08:08] (current) – little typo thilo | ||
---|---|---|---|
Line 52: | Line 52: | ||
\\ | \\ | ||
- | - Date covers from 1970 - in case Tomato Router has no time. | + | |
+ | | ||
- Sometimes tar fails. | - Sometimes tar fails. | ||
- | - All eaRlier | + | - All earlier |
- | - A total number of backups is kept. This number is configurable. | + | - A total number of backups is kept. This number is configurable. Older ones are deleted. |
\\ | \\ | ||
Line 61: | Line 62: | ||
# | # | ||
- | ROUTER=`ip r | grep default | head -1 | cut -d " " -f 3` | + | |
- | | + | |
- | | + | |
- | + | ||
- | + | ||
- | if [[ " | + | |
- | | + | |
- | LOCAL_ID_FILE=$2 | + | |
- | fi | + | |
- | echo | + | |
- | echo " | + | |
- | echo " | + | |
- | echo | + | |
- | BACKUPHOST=`ip r | grep ${ROUTER} | + | |
- | PORT=5555 | + | |
- | BACKUP_DIR=/ | + | |
- | SCRIPT_FILE=nvram_save_cfg.sh | + | |
- | PREFIX=FreshTomato | + | |
- | EXT=cfg | + | |
- | TRANSFER_FILENAME=config.tar | + | |
- | + | ||
- | # DATE_REGEX covers back to 1970 and further, in case Tomato Router has no date or date 1970-01-101 | + | |
- | # Total coverage: 1900-01-01 until 2999-12-31 :-) | + | |
- | DATE_REGEX=[12][09][0-9][0-9][01][0-9][0123][0-9] | + | |
- | TIME_REGEX=[012][0-9][0-5][0-9] | + | |
- | NO_OF_DIFF_FILES_TO_BE_KEPT=10 | + | |
- | pushd ${BACKUP_DIR} > /dev/null | + | while [[ $# -gt 0 ]]; do |
- | + | case $1 in | |
- | rm -f ${TRANSFER_FILENAME} | + | -d|--dir2backup) |
- | + | DIR2BACKUP=$2 ;; | |
- | # Thinks like | + | -i|--idfile) |
- | # VAR=`nvram get os_version` | + | LOCAL_ID_FILE=$2 ;; |
- | # seem not to work in bash via here doc, so write results into script file and source it | + | -r|--router) |
- | # Further the individual filename is general not known, so tar it into temp file | + | ROUTER=$2 ;; |
- | # | + | esac |
- | # Kill netcat zombies | + | shift; shift |
- | kill -9 `ps -ef | grep -v grep | grep netcat | sed -e "s/ [ ]*/ /g" | cut -d " " -f 2` 2> /dev/null | + | |
- | (netcat -l -p ${PORT} > ${TRANSFER_FILENAME}) & | + | |
- | ssh ${USER}@${ROUTER} -i ${LOCAL_ID_FILE} << | + | |
+ | | ||
+ | echo " | ||
+ | echo "id file: " | ||
+ | echo " | ||
+ | echo " | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | # DATE_REGEX covers back to 1970 and further, in case Tomato Router has no date or date 1970-01-01 | ||
+ | # Total coverage: 1900-01-01 until 2999-12-31 :-) | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | pushd ${DIR2BACKUP} > /dev/null | ||
+ | | ||
+ | | ||
+ | # | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT} | rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT} | ||
echo "nvram save ${PREFIX}" | echo "nvram save ${PREFIX}" | ||
Line 114: | Line 124: | ||
sleep 5 # just wait a little bit before deleting the files not needed here any more | sleep 5 # just wait a little bit before deleting the files not needed here any more | ||
rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT} | rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT} | ||
- | | + | ENDSSH |
- | + | | |
- | THIS_BACKUP_FILE=`tar -xvf ${TRANSFER_FILENAME} | sed -e " | + | |
- | if [ " | + | |
echo "Saved on this computer in `pwd`:" | echo "Saved on this computer in `pwd`:" | ||
echo ${THIS_BACKUP_FILE} | echo ${THIS_BACKUP_FILE} | ||
echo | echo | ||
- | # Keep only one file (the latest) per day - delete earlier file of same day | ||
TODAYS_BACKUP_FILES_PREFIX=${THIS_BACKUP_FILE%_*} | TODAYS_BACKUP_FILES_PREFIX=${THIS_BACKUP_FILE%_*} | ||
+ | ALL_BACKUP_FILES_PREFIX=${TODAYS_BACKUP_FILES_PREFIX%_*} | ||
+ | DATE=`date +%Y%m%d_%H%M` | ||
+ | if ! [[ `find -cmin 5 | grep ${THIS_BACKUP_FILE}` ]] ; then | ||
+ | # Date of the new files is more that 5 mins in the past => seems Tomato Router has no date (or date 1970-01-01) | ||
+ | touch ${THIS_BACKUP_FILE} | ||
+ | fi | ||
+ | # Keep only one file (the latest) per day - delete earlier file of same day | ||
LIST_OLD_BACKUPS_OF_TODAY=`ls -t ${TODAYS_BACKUP_FILES_PREFIX}_${TIME_REGEX}.${EXT} 2> /dev/null | sed -e 1,1d` | LIST_OLD_BACKUPS_OF_TODAY=`ls -t ${TODAYS_BACKUP_FILES_PREFIX}_${TIME_REGEX}.${EXT} 2> /dev/null | sed -e 1,1d` | ||
if [ " | if [ " | ||
echo " | echo " | ||
- | rm -v ${LIST_OLD_BACKUPS_OF_TODAY} | + | rm -fv ${LIST_OLD_BACKUPS_OF_TODAY} |
echo | echo | ||
fi | fi | ||
# In total, keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} files - delete older files (of any day) | # In total, keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} files - delete older files (of any day) | ||
- | | + | |
- | DELETE_OLDER=`ls -t ${ALL_BACKUP_FILES_PREFIX}_${DATE_REGEX}_${TIME_REGEX}.${EXT} | sed -e 1, | + | if [ "${OLDER_FILES}" ]; then |
- | if [ "${DELETE_OLDER}" ]; then | + | |
echo "keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} in total, delete:" | echo "keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} in total, delete:" | ||
- | rm -fv ${DELETE_OLDER} | + | rm -fv ${OLDER_FILES} |
echo | echo | ||
fi | fi | ||
# delete transfer file only when tar was successfull, | # delete transfer file only when tar was successfull, | ||
rm ${TRANSFER_FILENAME} | rm ${TRANSFER_FILENAME} | ||
- | | + | else |
echo " | echo " | ||
- | | + | fi |
- | popd > /dev/null | + | |
+ | |||
\\ | \\ | ||