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