我正在尝试在执行 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