This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
backup_script [2025/04/29 15:43] – thilo | backup_script [2025/05/06 08:08] (current) – little typo thilo | ||
---|---|---|---|
Line 34: | Line 34: | ||
The script then archives the resulting data in a tar file and sends it through the netcat command, transferring it over the network. | The script then archives the resulting data in a tar file and sends it through the netcat command, transferring it over the network. | ||
- | Restore a backup file is the same procedure as resorting an archive created in the WEB-GUI (last testet | + | Restore a backup file is the same procedure as resorting an archive created in the WEB-GUI (last tested |
\\ | \\ | ||
Line 52: | Line 52: | ||
\\ | \\ | ||
- | - Date covers from 1970 - in case Tomato Router has no time. | + | |
- | - Sometimes tar fails - cover this error by just cleaning, next cron run may do it | + | |
- | - All ealier backup | + | - Sometimes tar fails. |
- | - A configurable | + | - All earlier backups |
+ | - A total number of backups is kept. This number is configurable. Older ones are deleted. | ||
\\ | \\ | ||
+ | |||
# | # | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | while [[ $# -gt 0 ]]; do | ||
+ | case $1 in | ||
+ | -d|--dir2backup) | ||
+ | DIR2BACKUP=$2 ;; | ||
+ | -i|--idfile) | ||
+ | LOCAL_ID_FILE=$2 ;; | ||
+ | -r|--router) | ||
+ | ROUTER=$2 ;; | ||
+ | esac | ||
+ | shift; shift | ||
+ | done | ||
+ | |||
+ | | ||
+ | echo | ||
+ | echo " | ||
+ | echo "id file: " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo | ||
| | ||
- | | ||
| | ||
- | | ||
| | ||
| | ||
- | EXT=.cfg | + | |
| | ||
- | # DATE_REGEX covers back to 1970 and further, in case Tomato Router has no date or date 1970-01-101 | + | # 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 :-) | # Total coverage: 1900-01-01 until 2999-12-31 :-) | ||
- | | + | |
- | + | | |
| | ||
- | | + | |
- | ROUTER=`ip r | grep default | head -1 | cut -d " " -f 3` | + | pushd ${DIR2BACKUP} > /dev/null |
- | | + | |
- | pushd ${BACKUP_DIR} | + | rm -f ${TRANSFER_FILENAME} |
- | + | ||
- | | + | |
# | # | ||
# Thinks like | # Thinks like | ||
- | # VAR=`nvram get os_version` | + | # VAR=`nvram get os_version` |
# seem not to work in bash via here doc, so write results into script file and source it | # seem not to work in bash via here doc, so write results into script file and source it | ||
- | # Further, the individual filename is generally | + | # Further the individual filename is general |
# | # | ||
- | ssh ${USER}@${ROUTER} -i ${LOCAL_ID_FILE}<< | + | # Kill netcat zombies |
- | | + | kill -9 `ps -ef | grep -v grep | grep netcat | sed -e "s/ [ ]*/ /g" | cut -d " " -f 2` 2> /dev/null |
- | | + | |
- | | + | ssh ${USER}@${ROUTER} -i ${LOCAL_ID_FILE} << |
- | | + | rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT} |
- | | + | echo "nvram save ${PREFIX}" |
- | | + | nvram get os_version | sed -e "s/ .*$//" >> ${SCRIPT_FILE} |
- | | + | echo " |
- | | + | nvram get t_model_name | tr " " " |
- | cat ${SCRIPT_FILE} | + | nvram get router_name >> ${SCRIPT_FILE} |
- | source ${SCRIPT_FILE} | + | date +%Y%m%d_%H%M >> ${SCRIPT_FILE} |
- | | + | sed -e " |
- | | + | source ${SCRIPT_FILE} |
- | | + | tar -cvf ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT} |
- | | + | cat ${TRANSFER_FILENAME} | nc ${BACKUPHOST} ${PORT} |
- | | + | sleep 5 # just wait a little bit before |
+ | rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT} | ||
| | ||
- | | + | |
if [ " | if [ " | ||
- | | + | |
- | echo " | + | echo ${THIS_BACKUP_FILE} |
- | rm -v ${OLD_BACKUPS_OF_TODAY} | + | echo |
- | | + | 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} | ||
+ | | ||
+ | | ||
+ | rm -fv ${LIST_OLD_BACKUPS_OF_TODAY} | ||
+ | echo | ||
+ | | ||
+ | | ||
+ | | ||
+ | if [ " | ||
+ | echo "keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} in total, delete:" | ||
+ | rm -fv ${OLDER_FILES} | ||
+ | echo | ||
+ | fi | ||
+ | # delete transfer file only when tar was successfull, | ||
+ | rm ${TRANSFER_FILENAME} | ||
else | else | ||
echo " | echo " | ||
- | | + | fi |
- | + | | |
- | rm ${TRANSFER_FILENAME} | + | |
- | | + | |
\\ | \\ | ||