我有一個 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
但是,當我啟動服務時絕對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
這很正常。系統不支援從任意位置啟動單位;它們必須位於標準搜尋目錄之一。如果您的單元已經在 中/etc/systemd/system
,則無需指定其路徑。
systemctl 有各種快捷方式用於啟動不同的單元類型 - 目錄路徑被轉換為 .mount 單元;例如systemctl start /mnt/data
被翻譯為systemctl start mnt-data.mount
.