使用 systemd 进行 rsync 和 sshpass

使用 systemd 进行 rsync 和 sshpass

我正在尝试在执行 rsync 远程备份的 Debian 服务器上设置 systemd 计时器。我编写了一个 systemd 服务文件:

[Unit]
Description=My Backup Service

[Service]
ExecStart=/usr/bin/sshpass -p "mypassword" /usr/bin/rsync --log-file=/var/log/mybackup.log --rsync-path=/bin/rsync -avE --delete /var/www/* [email protected]:/mybackup

[Install]
WantedBy=default.target

当我启动服务时,出现以下错误:

Aug 13 23:21:44 debian systemd[1]: Started Backup Service.
Aug 13 23:21:44 debian sshpass[12564]: Unexpected remote arg: [email protected]:/mybackup
Aug 13 23:21:44 debian sshpass[12564]: rsync error: syntax or usage error (code 1) at main.c(1348) [sender=3.1.1]
Aug 13 23:21:44 debian systemd[1]: mybackup.service: main process exited, code=exited, status=1/FAILURE
Aug 13 23:21:44 debian systemd[1]: Unit mybackup.service entered failed state.

手动运行命令行不会出错。systemd 是否以不同的方式解析命令行?

答案1

手动运行命令行不会出错。systemd 是否以不同的方式解析命令行?

是的。它不会生成 shell。

此外,变量的工作方式与 shell 不同。${FOO} 扩展为一个单词,而 $FOO 则根据空格将其拆分(shell 将使用双引号来定义是否发生单词拆分。)

单引号和双引号的工作方式也存在一些差异。

systemd 还将扩展 % 说明符,例如 %i、%n、%h 等。

您可以在此处找到有关 systemd 如何处理命令行的完整文档: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%20lines

相关内容