【问题标题】:systemd: tar (backup) issue backup.servicesystemd:tar(备份)问题 backup.service
【发布时间】:2018-11-21 22:27:02
【问题描述】:

下面应该制作一个带有日期的 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

【问题讨论】:

标签: linux cron debian lamp systemd


【解决方案1】:

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

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

请记住,您可以有多个 ExecStart= 行,因此您不需要使用 && 语法,您只需添加一个额外的 ExecStart= 行。

您的文字说您的命令将删除超过 30 天的文件,但它不会尝试这样做。在您发布的内容中,find 命令已运行,但没有删除命令。

【讨论】:

  • 你是对的。尽管只是部分有帮助,但仍然是一个很好的答案,可以解决其他一些问题。谢谢:)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 2016-02-13
    • 2016-01-09
    • 1970-01-01
    • 2019-05-14
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多