systemd:tar(备份)问题backup.service

时间:2018-06-12 13:35:18

标签: linux cron debian lamp systemd

以下内容应该生成带有日期的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 :(得分:0)

您已经询问了常见问题Why do things behave differently under systemd?的变体。

在该常见问题解答的答案中,您会注意到系统具有更严格的命令行语法,如ExecStart=COMMAND LINES中所述。

请注意,您可以有多个&&行,因此您无需使用ExecStart=语法,只需添加额外的find行。

您的文字说您的命令会删除超过30天的文件,但它不会尝试执行此操作。在您发布的内容中,运行PyObject *pos = PyTuple_Pack(tl, x, y); 命令,但没有删除命令。

答案 1 :(得分:0)

这是我在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"。我认为这不是最优雅的方式,但它似乎没问题,因为这是一个相当短的脚本。我认为可以肯定地说,将其复制到另一个系统应该没有任何危害,即使它由于某种原因而失败了。