После неудачного удаления всех точек и треков с навигатора, решил, что автоматический бекап это наше всё.
Сделал средствами 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