Rotating Backup of Node-Red Flows on Raspberry Pi3
You can tweak the commands to perform backups of other folders too. The flow puts the backup archive in a separate folder. I use Resilio Sync to synchronize the backup to my other machines. You can use other techniques to get the backup files out of Pi3.
The flow performs the following tasks:
- Create a backup of .node-red folder daily at 2200
- Place the backup in Sync folder
- Delete older files form the Sync folder
I also use a Telegram bot to get the log messages of the backup task (In a modified version of the flow). There are other ways to get the log messages, for example Email, IFTTT or similar push notification services.
This command is used to create backup archive:
sudo zip -rq /home/rslsync/Resilio\ Sync/Sync-Pi3Backups/node-red-pi3-backup-$(date +%Y-%m-%d).zip /home/pi/.node-red
And this command is used to delete files older than 7 days:
sudo find /home/rslsync/Resilio\ Sync/Sync-Pi3Backups/*.zip -mtime +7 -type f -delete
Hope you find this useful.
Follow me on Twitter for more @ch3ckmat3
[{"id":"afdd00a8.c164e","type":"tab","label":"Pi-Backup","disabled":false,"info":"Rotating backup of .node-red folder"},{"id":"90b48cc.b1c817","type":"exec","z":"afdd00a8.c164e","command":"sudo zip -rq /home/rslsync/Resilio\\ Sync/Sync-Pi3Backups/node-red-pi3-backup-$(date +%Y-%m-%d).zip /home/pi/.node-red","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"backup .node-red","x":170,"y":120,"wires":[["1bdeefbd.0228e"],["1bdeefbd.0228e"],["f634084b.c99258"]]},{"id":"b5792cd9.c3485","type":"inject","z":"afdd00a8.c164e","name":"daily @2200","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"00 22 * * *","once":false,"onceDelay":0.1,"x":180,"y":40,"wires":[["90b48cc.b1c817"]]},{"id":"91ae8041.30c1f","type":"debug","z":"afdd00a8.c164e","name":"backup-log","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":890,"y":280,"wires":[]},{"id":"f634084b.c99258","type":"switch","z":"afdd00a8.c164e","name":"check op success","property":"payload.code","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":170,"y":220,"wires":[["63612c09.a87c44"],["b8e47d62.d4494"]]},{"id":"63612c09.a87c44","type":"exec","z":"afdd00a8.c164e","command":"sudo find /home/rslsync/Resilio\\ Sync/Sync-Pi3Backups/*.zip -mtime +7 -type f -delete","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"delete older than 7 days","x":450,"y":200,"wires":[["1bdeefbd.0228e"],["1bdeefbd.0228e"],["18c93cb0.0310f3"]]},{"id":"b8e47d62.d4494","type":"change","z":"afdd00a8.c164e","name":"custom error msg","rules":[{"t":"set","p":"payload","pt":"msg","to":"🔴️ There was an error in Pi3 backup flow. Check logs.","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":360,"wires":[["91ae8041.30c1f"]]},{"id":"18c93cb0.0310f3","type":"switch","z":"afdd00a8.c164e","name":"check op success","property":"payload.code","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":280,"wires":[["d8bc01da.f6239"],["b8e47d62.d4494"]]},{"id":"d8bc01da.f6239","type":"template","z":"afdd00a8.c164e","name":"success msg","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"✅ Pi3 Backup comelete.","output":"str","x":690,"y":260,"wires":[["91ae8041.30c1f"]]},{"id":"1bdeefbd.0228e","type":"switch","z":"afdd00a8.c164e","name":"filter null","property":"payload","propertyType":"msg","rules":[{"t":"nnull"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":680,"y":120,"wires":[["91ae8041.30c1f"],[]]}]