У меня openSUSE Leap 42.3, и я пытаюсь запустить службу systemd через udev, чтобы автоматизировать резервное копирование. Я использую простую службу systemd, которая запускает скрипт резервного копирования, который отлично работает из CLI. При использовании udev служба systemd не запускается (код ошибки 5). Оказывается, проблема не в службе, а в systemd!
В частности, когда я запускаю службу без абсолютных путей из CLI, все нормально:
# systemctl start hdd-backup.service
# systemctl status hdd-backup.service
● hdd-backup.service - Backup to external HDD
Loaded: loaded (/etc/systemd/system/hdd-backup.service; static; vendor preset: disabled)
Active: active (running) since Tue 2018-04-10 21:09:34 EEST; 8s ago
Main PID: 14455 (backup.sh)
Tasks: 3 (limit: 512)
CGroup: /system.slice/hdd-backup.service
├─14455 /bin/bash /usr/local/bin/backup.sh
├─14460 /sbin/mount.ntfs /dev/sdc1 /mnt/backup -o rw
└─14463 sleep 3000
Однако, когда я запускаю службу сабсолютныйpaths завершается неудачей, поскольку он пытается запустить службу .mount(!!!):
systemctl start /etc/systemd/system/hdd-backup.service
Failed to start etc-systemd-system-hdd\x2dbackup.service.mount: Unit etc-systemd-system-hdd\x2dbackup.service.mount failed to load: No such file or directory.
Есть идеи?
решение1
Это нормально. Systemdне поддерживаетзапуск юнитов из произвольных мест; они должны быть в одном из стандартных каталогов поиска. Если ваш юнит уже находится в /etc/systemd/system
, нет необходимости указывать его путь.
systemctl имеет различные сочетания клавиш для запуска различных типов модулей – пути к каталогам преобразуются в модули .mount; например, systemctl start /mnt/data
преобразуется в systemctl start mnt-data.mount
.