LINUX.ORG.RU

Автоматическое копирование на флешку

 , ,


3

2

Добрый день.

Хочу сделать так, чтобы при втыкании флешки в комп на нее автоматически копировалось содержимое каталога из моей домашней папки (музыка и подкасты). Для этого, как я понимаю, нужно использовать связку udev + systemd.

carmusic.service в /etc/systemd/system/:

[Service]
Type=oneshot
ExecStart=/usr/local/bin/car_music

/etc/udev/rules.d/95-carmusic.rules:

ACTION=="add", SUBSYSTEM=="usb", ATTRS{SERIAL}=="01QHPWDA1RLK098X", TAG+="systemd", ENV{SYSTEMD_WANTS}="carmusic.service"

В самом скрипте /usr/local/bin/car_music тупо команда копирования (cp -r с путями). Запускаю скрипт - работает. Запускаю сервис systemctl start carmusic при смонтированной флешке - работает. Компьютер не перезагружается неделями (без особой на то причины, просто так сложилось). ОС - Fedora 24 x64 Gnome.

Подскажите, пожалуйста, что я делаю не так.

надо кастовать intelfx

А в своем скрипте замени cp на rsync

З.ы. а вообще есть решение без скриптов в udev:

There's much nicer solution with systemd now. You create a service which depends and is wanted by you media e.g.: /etc/systemd/system/your.service

[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount

[Service]
ExecStart=/home/you/bin/triggerScript.sh

[Install]
WantedBy=media-YourMediaLabel.mount
Then you have to start/enable the service:
sudo systemctl start your.service
sudo systemctl enable your.service

After mount systemd fires your trigger script. The advantage over udev rule is that the script really fires after mount, not after adding system device.

Use case: I have a crypted partition which I want to backup automatically. After adding the device I have to type-in password. If I hooked the backup script to udev, the script attempts to run at the time when I'm typing password, which will fail.

Resource: Scripting with udev

Note: You can find your device unit with: sudo systemctl list-units -t mount

https://askubuntu.com/questions/25071/how-to-run-a-script-when-a-specific-fla...

Siado ★★★★★
()
Последнее исправление: Siado (всего исправлений: 1)
Ответ на: комментарий от Siado

О, круто, спасибо! Как раз то, что нужно. Сейчас попробую, если сработает, тему закрою.

kemechedzhiev
() автор топика

сделай так:
ACTION==«add», SUBSYSTEM==«usb», RUN+=«/usr/bin/logger added $env{ID_VENDOR_ID}»
воткни флэшку и как ты увидишь в логе, сообщение added Bla-bla появится раньше чем будет смонтированна его файловая система. может быть проблема в этом?

bass ★★★★★
()
Ответ на: комментарий от Siado

Да, всё так, только start'овать этот юнит не нужно. Всё равно не сработает (если диск не подключен). Ну и BindsTo= вместо Requires=, если совсем правильно делать.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.