Может ли кто-нибудь, кто знает systemd, помочь мне выяснить, что я делаю неправильно?Как использовать systemd для активации скрипта для резервного копирования файлов при завершении работы
Я пытаюсь использовать systemd для запуска скрипта, который будет синхронизировать (резервные) файлы из домашнего каталога пользователя (mardi) на второй диск, когда пользователь выключит свой компьютер. Я бы предпочел, чтобы это произошло только при выключении, но если это становится слишком сложным, это может произойти при выключении или перезагрузке; Я в порядке с этим. (Я знаю, что это не особенно хорошая стратегия резервного копирования, но это шаг первый в общем процессе, поэтому, пожалуйста, не сообщайте о нецелесообразности этого, я хочу это сделать, и я хочу узнать, как правильно использовать systemd. пожалуйста, сообщите, что помогает)
Я запускаю Linux Mint 18 - Ubuntu 16.04 на основе - если это имеет значение для ответов.
Я включил то, что я сделал ниже, что является результатом чтения man-страниц для systemd и нескольких (часто конфликтующих) страниц форума здесь и в других местах, но я не получаю его для работы.
Я протестировал скрипт bash, и когда он запущен, он делает то, что я хочу.
Я вручную остановил mardibackup.service, запустив systemctl stop mardibackup.service, и он делает то, что я хочу.
Таким образом, я ожидаю, что я не определяю устройство должным образом или не позвоню службе должным образом, но я не могу понять, что делать.
Конкретные вопросы:
1) Зачем использовать multi-user.target и вызвать службы, когда ExecStop срабатывает останавливается? Почему бы просто не использовать shutdown.target и вызвать службу при запуске ExecStart?
2) Что означает ExecStart =/bin/true? Кажется, он ничего не делает, но во многих рекомендуемых ответах.
Помогите? И благодарю вас.
Итак, вот что я сделал:
1) Создайте следующий сценарий, используя Счастливчик резервного копирования для создания команды Rsync и поместить его в /home/mardi/Templates/backupmardi.sh (это работать, когда я исполняю его вручную из командной строки)
#!/bin/bash
# This program synchronizes the contents of mardi home directory
# to the archives disk in /backups/mardi
#
# It checks if a current version of a file is already copied and if so, does not change anything
# If a file is deleted in the home directory, it is NOT deleted from the archives
rsync -h --progress --stats -r -tgo -p -l -D --update --delete-after /home/mardi /mnt/7b2152a9-af3c-4f63-9287-98aacd9cb8ff/backups/
2) Изменение прав доступа к файлу сценария, чтобы сделать его исполняемым
chmod +x /home/mardi/Templates/backupmardi.sh
3) Создайте следующий сервис shutdown/restart для вызова сценария резервного копирования и поместите его в /etc/systemd/system/mardibackup.service (это делает то, что я хочу, если вручную «Остановить» его с помощью systemctl stop mardibackup.service)
[Unit]
Description=Backup Mardi home dir to archives
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/bin/bash /home/mardi/Templates/backupmardi.sh
[Install]
WantedBy=multi-user.target
4) создать символическую ссылку, которая будет вызывать выключение/перезапуск сценария при выключении системы/перезапуске
systemctl enable /etc/systemd/system/mardibackup.service
(Note if you ever want to remove the symlink, enter: systemctl disable mardibackup.service)
systemctl start mardibackup.service
5) Завершение работы системы (я попробовал несколько остановок, но это не называют резервный скрипт backupmardi.sh)
У кого-нибудь есть идеи?
Вышеупомянутый должен читать «Итак, он работает ...» – Ramblin