systemd: tar (резервная копия) проблема backup.service - PullRequest
0 голосов
/ 12 июня 2018

Следующее должно создать файл tar с датой, и после создания файла .tar.gz проверьте, существует ли файл старше 30 дней, если да, удалите его.Вот что я получаю, выполняя его в systemd.он работает безупречно при прямом вводе в командной строке:

при выполнении: journalctl -u backup.service

Jun 12 14:42:39 Debian-84-jessie-64-LAMP systemd[1]: Starting Backing up folders (/var/www/)...
Jun 12 14:42:39 Debian-84-jessie-64-LAMP systemd[1]: Started Backing up folders (/var/www/).
Jun 12 14:42:39 Debian-84-jessie-64-LAMP tar[27620]: /bin/tar: Von den Optionen „-Acdtrux“, „--delete“ oder „--test-label“ ist j
Jun 12 14:42:39 Debian-84-jessie-64-LAMP tar[27620]: „/bin/tar --help“ oder „/bin/tar --usage“ gibt weitere Informationen.
Jun 12 14:42:39 Debian-84-jessie-64-LAMP systemd[1]: backup.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Jun 12 14:42:39 Debian-84-jessie-64-LAMP systemd[1]: Unit backup.service entered failed state.

backup.service

[Unit]
Description=Backing up folders (/var/www/)

[Service]
WorkingDirectory=/backup/www/
ExecStart=/bin/tar -czpf "backup_$(date '+%y-%m-%d').tar.gz" /var/www/ && find /backup/www/ -maxdepth 0 -name "backup_*.*" -mtime +30

backup.timer

[Unit]
Description=Make Backup of /var/www/

[Timer]
OnCalendar=weekly
Persistent=true

[Install]
WantedBy=timers.target

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Вот как я решил это в своем файле backup.service:

[Unit]
Description=Backing up folders (/var/www/)

[Service]
Type=oneshot
WorkingDirectory=/backup/www/
ExecStart=/bin/tar -zcf "backup_weekly.tar.gz" /var/www
ExecStart=/usr/bin/find /backup/www/ -maxdepth 0 -name "backup_*.tar.gz" -type f -mtime +30 -delete
ExecStart=/bin/sh /backup/www/rename_backup.sh

Это мой файл backup.timer:

[Unit]
Description=Make Backup of /var/www/

[Timer]
OnCalendar=weekly
Persistent=true

[Install]
WantedBy=timers.target

И, наконец, вот файл сценария, который называетсяrename_backup.sh, который находится в папке резервной копии:

mv /backup/www/backup_weekly.tar.gz /backup/www/backup_weekly_$(date +%F).tar.gz

Причина, по которой я не решил просто выполнить скрипт, заключалась в том, что я хотел просто запустить его из systemd, скопировав только два файла, иделая систему независимой.Оказывается, у systemd есть свои предпочтения и проблемы с командами bash, из-за чего некоторые из них не работают.Рядом с моим исполнением скрипт создает резервную копию с именем «backup_weekly.tar.gz», дата еще не указана.Однако затем вызывается сценарий, который переименовывает «backup_weekly.tar.gz» (который всегда будет создаваться с таким именем systemd.service) в «backup_weekly_DATE.tar.gz».Я предполагаю, что это не самый элегантный способ, но кажется, что все в порядке, так как это довольно короткий сценарий.Я думаю, что можно с уверенностью сказать, что копирование этого в другую систему не должно причинить вреда, даже если по какой-то причине оно окажется неудачным.

0 голосов
/ 12 июня 2018

Вы задали вариант часто задаваемых вопросов Почему в systemd все иначе? .

В ответе на этот FAQ вы заметите, что система имеет гораздо более строгий синтаксис командной строки, как описано в КОМАНДНЫЕ ЛИНИИ в man systemd.service.

Помните, что вы можете иметь несколько ExecStart= строк, поэтому вам не нужно использовать синтаксис &&, вы можете просто добавить дополнительную ExecStart= строку.

В вашем тексте говорится, что ваша команда удалитфайлы старше 30 дней, но он не пытается сделать это.В том, что вы опубликовали, команда find запускается, но команды удаления нет.

...