私は 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
。