systemd start /etc/systemd/system/custom.service が起動できません

systemd start /etc/systemd/system/custom.service が起動できません

私は openSUSE Leap 42.3 を使用しており、バックアップを自動化するために udev 経由で systemd サービスを実行しようとしています。CLI から問題なく動作するバックアップ スクリプトを起動するシンプルな systemd サービスを使用しています。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サポートしていません任意の場所からユニットを開始します。ユニットは標準の検索ディレクトリの 1 つに存在する必要があります。ユニットがすでに にある場合は/etc/systemd/system、そのパスを指定する必要はありません。


systemctl には、さまざまなユニット タイプを起動するためのさまざまなショートカットがあります。ディレクトリ パスは .mount ユニットに変換されます。たとえば、systemctl start /mnt/dataは に変換されますsystemctl start mnt-data.mount

関連情報