Я пытаюсь настроить таймер systemd на сервере debian, выполняющем удаленное резервное копирование rsync. Я написал служебный файл 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/* admin@192.168.1.3:/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: admin@192.168.1.3:/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 по-другому анализирует командную строку?
Запуск командной строки вручную не вызывает ошибок. Systemd по-другому анализирует командную строку?
Да. Он не порождает оболочку.
Более того, переменные работают иначе, чем оболочка. $ {FOO} расширяется до одного слова, а $ FOO разбивает его на пробелы (оболочка будет использовать двойные кавычки, чтобы определить, происходит ли разделение слов или нет).
Есть также некоторые различия в том, как работают одинарные и двойные кавычки.
systemd также расширит спецификаторы%, такие как% i,% n,% h и т. д.
Вы можете найти полную документацию о том, как systemd обрабатывает командные строки здесь: https://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%20lines