我有一台 openSUSE Leap 42.3,我尝试通过 udev 运行 systemd 服务来自动执行备份。我使用一个简单的 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
但是,当我使用绝对路径失败,因为它尝试启动 .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
。