diff --git a/home-server/homeassistant-backup/homeassistant-backup.service b/home-server/homeassistant-backup/homeassistant-backup.service deleted file mode 100644 index 81fba3b..0000000 --- a/home-server/homeassistant-backup/homeassistant-backup.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Backup Home Assistant -After=network.target - -[Service] -ExecStart=/home/willem/.bun/bin/bun /home/willem/repos/homeAutomation/home-server/homeassistant-backup/homeassistant-backup/index.ts -WorkingDirectory=/home/willem/repos/homeAutomation/home-server/homeassistant-backup/homeassistant-backup -Restart=on-failure -User=willem -Environment=PATH=/usr/bin:/usr/local/bin -Environment=NODE_ENV=production - -[Install] -WantedBy=multi-user.target diff --git a/home-server/homeassistant-backup/homeassistant-backup/index.ts b/home-server/homeassistant-backup/homeassistant-backup/index.ts deleted file mode 100644 index b3e68af..0000000 --- a/home-server/homeassistant-backup/homeassistant-backup/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { $ } from "bun"; -import moment from "moment"; -import logger from "pino"; - -const log = logger(); - -const timestamp = moment().format("YYYY-MM-DD_hh-mm-ss"); // Return today's date time - -log.info('Creating new copy') -// Sync new copy -await $`rsync -a /etc/homeassistant /mnt/usb/backup_homeassistant_${timestamp}`; - -log.info('Only keep last 3 copies') -// Only keep last 3 copies -await $`cd /mnt/usb && ls | grep homeassistant | tail -n +4 | xargs rm -rf`; diff --git a/home-server/homeassistant-backup/homeassistant-backup/.gitignore b/home-server/systemd/recurring-tasks/homeassistant-backup/.gitignore similarity index 100% rename from home-server/homeassistant-backup/homeassistant-backup/.gitignore rename to home-server/systemd/recurring-tasks/homeassistant-backup/.gitignore diff --git a/home-server/homeassistant-backup/homeassistant-backup/README.md b/home-server/systemd/recurring-tasks/homeassistant-backup/README.md similarity index 100% rename from home-server/homeassistant-backup/homeassistant-backup/README.md rename to home-server/systemd/recurring-tasks/homeassistant-backup/README.md diff --git a/home-server/homeassistant-backup/homeassistant-backup/bun.lock b/home-server/systemd/recurring-tasks/homeassistant-backup/bun.lock similarity index 100% rename from home-server/homeassistant-backup/homeassistant-backup/bun.lock rename to home-server/systemd/recurring-tasks/homeassistant-backup/bun.lock diff --git a/home-server/systemd/recurring-tasks/homeassistant-backup/homeassistant-backup b/home-server/systemd/recurring-tasks/homeassistant-backup/homeassistant-backup new file mode 100755 index 0000000..cb0d0ec Binary files /dev/null and b/home-server/systemd/recurring-tasks/homeassistant-backup/homeassistant-backup differ diff --git a/home-server/systemd/recurring-tasks/homeassistant-backup/index.ts b/home-server/systemd/recurring-tasks/homeassistant-backup/index.ts new file mode 100644 index 0000000..9530215 --- /dev/null +++ b/home-server/systemd/recurring-tasks/homeassistant-backup/index.ts @@ -0,0 +1,86 @@ +import { $ } from "bun"; +import moment from "moment"; +import logger from "pino"; +import { parseArgs } from "util"; + +const { values } = parseArgs({ + args: Bun.argv, + options: { + mode: { + type: "string", + required: true, + }, + sourceFolder: { + type: "string", + required: true, + }, + targetFolder: { + type: "string", + required: true, + }, + backupName: { + type: "string", + required: true, + }, + }, + strict: true, + allowPositionals: true, +}); +const log = logger(); + +switch (values.mode) { + case "hot": + await hotCopy( + values.sourceFolder!, + values.targetFolder!, + values.backupName!, + ); + break; + case "cold": + await coldCopy( + values.sourceFolder!, + values.targetFolder!, + values.backupName!, + ); + break; +} + +// 3 cold copies are stored +async function hotCopy( + sourceFolder: string, + targetFolder: string, + backupName: string, +) { + const timestamp = moment().format("YYYY-MM-DD_HH-mm-ss"); // Return today's date time + + log.info("Creating new copy"); + await $`mkdir -p ${targetFolder}`; + // Sync new copy + await $`rsync -a ${sourceFolder} ${targetFolder}/backup_${backupName}_${timestamp}`; + + log.info("Only keep last 3 copies"); + // Only keep last 3 copies + await $`cd ${targetFolder} && ls | grep ${backupName} | sort -r | tail -n +4 | xargs rm -rf`; +} + +// Only 1 cold copy is retained +async function coldCopy( + sourceFolder: string, + targetFolder: string, + backupName: string, +) { + const timestamp = moment().format("YYYY-MM-DD_HH-mm-ss"); // Return today's date time + + log.info("Creating new copy"); + + // find latest backup + const sourceFolderToBackup = + await $`cd ${sourceFolder} && ls | grep ${backupName} | sort | tail -n 1`.text().then(resp => resp.replace('\n','')); + log.info(`Folder to back up: ${sourceFolderToBackup}`); + await $`mkdir -p ${targetFolder}`; + await $`zip -r ${targetFolder}/${backupName}_${timestamp}.zip ${sourceFolder}/${sourceFolderToBackup}`; + + log.info("Only keep last copy"); + // Only keep last copy + await $`cd ${targetFolder} && ls | grep ${backupName} | sort -r | tail -n +2 | xargs rm -rf`; +} diff --git a/home-server/homeassistant-backup/homeassistant-backup/package.json b/home-server/systemd/recurring-tasks/homeassistant-backup/package.json similarity index 100% rename from home-server/homeassistant-backup/homeassistant-backup/package.json rename to home-server/systemd/recurring-tasks/homeassistant-backup/package.json diff --git a/home-server/homeassistant-backup/homeassistant-backup/tsconfig.json b/home-server/systemd/recurring-tasks/homeassistant-backup/tsconfig.json similarity index 100% rename from home-server/homeassistant-backup/homeassistant-backup/tsconfig.json rename to home-server/systemd/recurring-tasks/homeassistant-backup/tsconfig.json diff --git a/home-server/systemd/recurring-tasks/homeassistant-cold-backup.service b/home-server/systemd/recurring-tasks/homeassistant-cold-backup.service new file mode 100644 index 0000000..fa9d82d --- /dev/null +++ b/home-server/systemd/recurring-tasks/homeassistant-cold-backup.service @@ -0,0 +1,14 @@ +[Unit] +Description=Backup Home Assistant - Cold +After=network.target + +[Service] +ExecStart=homeassistant-backup --mode cold --sourceFolder /mnt/usb/homeassistant/hot --targetFolder /mnt/usb/homeassistant/cold --backupName homeassistant +WorkingDirectory=/etc/homeassistant +Restart=off +User=willem +Environment=PATH=/usr/bin:/usr/local/bin +Environment=NODE_ENV=production + +[Install] +WantedBy=multi-user.target diff --git a/home-server/systemd/recurring-tasks/homeassistant-cold-backup.timer b/home-server/systemd/recurring-tasks/homeassistant-cold-backup.timer new file mode 100644 index 0000000..a17bf4f --- /dev/null +++ b/home-server/systemd/recurring-tasks/homeassistant-cold-backup.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Run Home assistant cold backup Service every day + +[Timer] +OnBootSec=1min +OnUnitActiveSec=1day +Persistent=true + +[Install] +WantedBy=timers.target + diff --git a/home-server/systemd/recurring-tasks/homeassistant-hot-backup.service b/home-server/systemd/recurring-tasks/homeassistant-hot-backup.service new file mode 100644 index 0000000..8a88624 --- /dev/null +++ b/home-server/systemd/recurring-tasks/homeassistant-hot-backup.service @@ -0,0 +1,14 @@ +[Unit] +Description=Backup Home Assistant - Hot +After=network.target + +[Service] +ExecStart=homeassistant-backup --mode hot --sourceFolder /etc/homeassistant --targetFolder /mnt/usb/homeassistant/hot --backupName homeassistant +WorkingDirectory=/etc/homeassistant +Restart=off +User=willem +Environment=PATH=/usr/bin:/usr/local/bin +Environment=NODE_ENV=production + +[Install] +WantedBy=multi-user.target diff --git a/home-server/homeassistant-backup/homeassistant-backup.timer b/home-server/systemd/recurring-tasks/homeassistant-hot-backup.timer similarity index 77% rename from home-server/homeassistant-backup/homeassistant-backup.timer rename to home-server/systemd/recurring-tasks/homeassistant-hot-backup.timer index 65fcb96..e1bb650 100644 --- a/home-server/homeassistant-backup/homeassistant-backup.timer +++ b/home-server/systemd/recurring-tasks/homeassistant-hot-backup.timer @@ -1,5 +1,5 @@ [Unit] -Description=Run Home assistant backup Service every hour +Description=Run Home assistant hot backup Service every hour [Timer] OnBootSec=1min diff --git a/home-server/systemd/recurring-tasks/pull-zettelkasten.service b/home-server/systemd/recurring-tasks/pull-zettelkasten.service new file mode 100644 index 0000000..354df04 --- /dev/null +++ b/home-server/systemd/recurring-tasks/pull-zettelkasten.service @@ -0,0 +1,14 @@ +[Unit] +Description=Pull zettelkasten +After=network.target + +[Service] +ExecStart=git pull +WorkingDirectory=/home/willem/repos/zettelkasten +Restart=no +User=willem +Environment=PATH=/usr/bin:/usr/local/bin +Environment=NODE_ENV=production + +[Install] +WantedBy=multi-user.target diff --git a/home-server/systemd/recurring-tasks/pull-zettelkasten.timer b/home-server/systemd/recurring-tasks/pull-zettelkasten.timer new file mode 100644 index 0000000..07c8399 --- /dev/null +++ b/home-server/systemd/recurring-tasks/pull-zettelkasten.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Pull zettelkasten every hour + +[Timer] +OnBootSec=1min +OnUnitActiveSec=1min +Persistent=true + +[Install] +WantedBy=timers.target + diff --git a/home-server/systemd/recurring-tasks/send-todo-mail.service b/home-server/systemd/recurring-tasks/send-todo-mail.service new file mode 100644 index 0000000..3208da8 --- /dev/null +++ b/home-server/systemd/recurring-tasks/send-todo-mail.service @@ -0,0 +1,14 @@ +[Unit] +Description=Send todo mail +After=network.target + +[Service] +ExecStart=sh -c "rg '\- \[ \]' . | mail -s todos willemserruys@proton.me" +WorkingDirectory=/home/willem/repos/zettelkasten +Restart=no +User=willem +Environment=PATH=/usr/bin:/usr/local/bin +Environment=NODE_ENV=production + +[Install] +WantedBy=multi-user.target diff --git a/home-server/systemd/recurring-tasks/send-todo-mail.timer b/home-server/systemd/recurring-tasks/send-todo-mail.timer new file mode 100644 index 0000000..a2b2cae --- /dev/null +++ b/home-server/systemd/recurring-tasks/send-todo-mail.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Send ToDo mail + +[Timer] +OnBootSec=1min +OnUnitActiveSec=5min +Persistent=true + +[Install] +WantedBy=timers.target +