Автозапуск Яндекс.Диска как службы systemd в Fedora 19

от автора

Захотелось тут делать на Яндекс.Диск резервные копии. Операционная система у меня Russian Fedora 19 x64. Запуск через rc.local был удален еще из предыдущих выпусков Fedora как устаревший, и я решил делать все по уму — запускать Яндекс.Диск как системную службу. Стандартный запуск служб в Fedora 19 это systemd, начинаем двигаться в этом направлении. Использую официальный консольный клиент Яндекс.Диска ( да код закрытый, но работает намного шустрее чем webdav, и не надо ломать голову с синхронизацией).

Итак, приступим:

  • Становлюсь root
    su
  • Создаю локальную директорию Яндекс.Диска
    mkdir /mnt/yandex-disk
  • Меняю директорию для загрузки пакета
    cd /usr/src
  • Скачиваю 64-битный rpm пакет
    wget http://repo.yandex.ru/yandex-disk/yandex-disk-latest.x86_64.rpm
  • Устанавливаю пакет
    rpm -ivh yandex-disk-latest.x86_64.rpm
  • Запускаю первоначальную настройку Яндекс.Диска
    yandex-disk setup
  • Отвечаю на вопросы Яндекс.Диска
    Использовать прокси-сервер? [y/N]: N Авторизация Если у вас ещё нет аккаунта на Яндексе, его можно завести по ссылке https://passport.yandex.ru/passport?mode=register  Введите логин: username Введите пароль: ******* Токен сохранен в /root/.config/yandex-disk/passwd Настройка Яндекс.Диска Введите путь к папке Яндекс.Диска (Оставьте пустым для использования папки '/root/Yandex.Disk'): /mnt/yandex-disk Запускать Яндекс.Диск при входе в систему? [Y/n]: n 

  • Копирую папку с конфигурацией в /etc (я считаю все файлы должны находится в стандартных местах)
    cp -r /root/.config/yandex-disk /etc
  • Правлю пути в файле /etc/yandex-disk/config.cfg
    nano /etc/yandex-disk/config.cfg
  • И привожу файл /etc/yandex-disk/config.cfg к следующему виду
    auth="/etc/yandex-disk/passwd" dir="/mnt/yandex-disk"
  • Создаю файл /usr/lib/systemd/system/yandex-disk.service
    nano /usr/lib/systemd/system/yandex-disk.service
  • Со следующим содержанием
    [Unit] Description=Yandex Disk console client Requires=network.target  [Service] Type=forking User=root Group=root ExecStart=/usr/bin/yandex-disk start -c /etc/yandex-disk/config.cfg #Следующие две строчки это костыль, т.к. при перезагрузке служба не стартует сразу, пишет ошибку: "Ошибка: путь к папке используется другим пользователем". #Скорее всего надо написать еще что-нибудь в "Requires=", чтобы служба стартовала после чего-то еще, но я не знаю что #Хотя с другой стороны если служба зависнет то сама перезапустится   RestartSec=60 Restart=always [Install] WantedBy=multi-user.target 
  • Перезапускаю systemd
    systemctl --system daemon-reload
  • Запускаю службу yandex-disk.service
    systemctl start yandex-disk.service
  • Проверям запуск службы командой
    systemctl status yandex-disk.service
  • И получаем примерно такой ответ
    [root@localhost .config]# systemctl status yandex-disk.service yandex-disk.service - Yandex Disk console client    Loaded: loaded (/usr/lib/systemd/system/yandex-disk.service; disabled)    Active: active (running) since Пт 2013-11-08 23:11:15 MSK; 1s ago   Process: 31601 ExecStart=/usr/bin/yandex-disk start -c /etc/yandex-disk/config.cfg (code=exited, status=0/SUCCESS)  Main PID: 31638 (yandex-disk)    CGroup: name=systemd:/system/yandex-disk.service            └─31638 /usr/bin/yandex-disk --tag="1 7 8 9 15 16" --no-daemon="true" --dir="/mnt/yandex-disk" --config="/etc/yandex-disk/config.cfg" --...  ноя 08 23:11:15 localhost.localdomain systemd[1]: Started Yandex Disk console client. 
  • Или проверям запуск службы командой
    yandex-disk status -c /etc/yandex-disk/config.cfg
  • И получаем такой ответ
    [root@localhost ~]# yandex-disk status -c /etc/yandex-disk/config.cfg Статус синхронизации: 47.1 KB/ 3.3 GB (0 %) Статус ядра синхронизации: синхронизация Путь к папке Яндекс.Диска: '/mnt/yandex-disk' Дисковое пространство: 	Занято: 5.2 GB 	Свободно: 4.8 GB 	Максимальный размер файла: 10 GB 	Размер корзины: 1.9 GB  Последние синхронизированные пути: 	файл: 'TEST/testfile.txt' 
  • Добавляю службу yandex-disk.service в автозагрузку
    systemctl enable yandex-disk.service

Все работает после перезагрузки.

Локальные копии бэкапов синхронизирую с локальной копией Яндекс.Диска командой в crobtab`е

/usr/bin/rsync -rc --delete /mnt/500gb/backups/ /mnt/yandex-disk/backups/ 

Также обнаружил возможность запускать несколько копий Яндекс.Диска с разными учетными записями. Например так:

/usr/bin/yandex-disk start -c /etc/yandex-disk1/config.cfg /usr/bin/yandex-disk start -c /etc/yandex-disk2/config.cfg /usr/bin/yandex-disk start -c /etc/yandex-disk3/config.cfg 

При отладке столкнулся с проблемой: служба не запускалась при загрузке. Выдавало ошибку: «Ошибка: путь к папке используется другим пользователем». Но потом без ошибок запускалась вручную systemctl start yandex-disk.service.
Решилось костылем с RestartSec=60 и Restart=always. Но это я считаю не совсем правильно, т.к. служба стартует со 2 раза — о чем говорит кусок лога:

tail -1000 /var/log/messages | grep 'yandex' Nov  8 19:34:19 sharov yandex-disk[514]: Ошибка: путь к папке используется другим пользователем: /mnt/yandex-disk Nov  8 19:34:48 sharov systemd[1]: yandex-disk.service holdoff time over, scheduling restart. Nov  8 19:34:49 sharov yandex-disk[1816]: Запуск демона...Готово 

P.S.: Мое решение не претендует абсолютную правильность. Но работает.
P.P.S: Что-то подсказывает мне что корзина в Яндекс.Диске не даст нормально использовать его для бэкапов, т.к. при удалении файлов из локальной копии Яндекс.Диска они перемещаются в корзину, а очистить корзину из консольного клиента нельзя, только из веб интерфейса. Тем самым уменьшается размер диска на размер файлов в корзине. И когда он переполнится бэкапы перестанут на него копироваться. Либо вручную жать на кнопочку очистить корзину из веб интерфейса, что является костылем. Подожду пока Яндекс.Диск заполнится и посмотрю что будет.

ссылка на оригинал статьи http://habrahabr.ru/post/201688/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *