Hatred's Log Place

DON'T PANIC!

May 23, 2022 - 2 minute read - Туризм Linux Maps

Автоматическое резервное копирование при подключении навигатора Garmin GPSMAP 64s

После неудачного удаления всех точек и треков с навигатора, решил, что автоматический бекап это наше всё.

Сделал средствами Systemd.

Для начала определяемся с местом для бекапа, пусть это будет ~/Documents/GPX и создаём там скрипт ~/Documents/GPX/sync.sh. А внутре… у ней неонка:

#!/bin/sh  
  
#  
# Ref:  
#  https://askubuntu.com/questions/25071/how-to-run-a-script-when-a-specific-flash-drive-is-mounted  
#  
# `systemctl list-units -t mount`  
#  
# "~/.local/share/systemd/user/garmin-backup.service"  
#  
#  
# ```  
# [Unit]  
# Description=Backup GARMIN GPSMAP 64s GPX data  
# # Use output from the: `systemctl list-units -t mount`  
# Requires=run-media-hatred-GARMIN.mount  
# After=run-media-hatred-GARMIN.mount  
#    
# [Service]  
# ExecStart=/home/hatred/Documents/GPX/sync.sh  
#    
# [Install]  
# WantedBy=run-media-hatred-GARMIN.mount  
# ```  
#  
# `systemctl --user start garmin-backup`  
# `systemctl --user enable garmin-backup`  
#  
# Monitor:  
#  
# ```sh  
# journalctl --user --unit garmin-backup -f  
# ```  
#  
  
prefix="/run/media/hatred/GARMIN/Garmin/GPX"  
  
dir=$(dirname $0)  
cd "$dir"  
  
echo "Work dir: " $(pwd)  
  
sleep 2  
  
stat "$prefix" 2> /dev/null && \  
   rsync -rubv --suffix=.old  "$prefix" . && \  
   touch sync_last.txt && \  
   notify-send -u normal -a "Garmin Sync" "Garmin GPSMAP 64s" "Backup done"

Да, я не разбирался с переменными для имени пользователя, поэтому указывал полные пути с учётом своего рабочего аккаунта: hatred. Т.е. нужно будет скорректировать под себя.

Следующий шаг: сам юнит. ~/.local/share/systemd/user/garmin-backup.service:

# Ref:  
#  https://askubuntu.com/questions/25071/how-to-run-a-script-when-a-specific-flash-drive-is-mounted  
#  
# systemctl list-units -t mount  
# systemctl --user start garmin-backup.service  
# systemctl --user enable garmin-backup.service  
#  
# journalctl --user --unit garmin-backup -f  
#  
[Unit]  
Description=Backup GARMIN GPSMAP 64s GPX data  
Requires=run-media-hatred-GARMIN.mount  
After=run-media-hatred-GARMIN.mount  
  
[Service]  
ExecStart=/home/hatred/Documents/GPX/sync.sh  
  
[Install]  
WantedBy=run-media-hatred-GARMIN.mount

Тут главное, это запуститься, когда увидим, что нужно устройство примонтировалось. У меня, когда монтируется GARMIN, он использует метку GARMIN для своего внутреннего хранилища (куда и пишутся GPX файлы). Путь для монтирования выходит /run/media/$USER/GARMIN.

Systemd создаёт временный сервис, на который можно сослаться. Если просто, то возьмите путь монтирования, у меня это /run/media/hatred/GARMIN, замените все / на - (кроме первого) и добавьте в конце .mount: run-media-hatred-GARMIN.mount. Ну или смотрим вывод:

systemctl list-units -t mount

после монтирования раздела GARMIN.

А за подробностями по ссылке:

После этого включаем сервис:

systemctl --user enable garmin-backup.service
systemctl --user start garmin-backup.service

Последить за работой:

journalctl --user --unit garmin-backup -f