Вопрос или проблема
Я установил клиент OneDrive onedrive v2.4.22-1+np1 (https://github.com/abraunegg/onedrive) на сервер Ubuntu (Ubuntu 22.04.1), который работает на Raspberry Pi 4.
После установки я запустил службу с помощью
systemctl --user enable onedrive
systemctl --user start onedrive
Синхронизация с OneDrive работает как ожидалось, пока я вошёл в систему. Когда я оставляю систему в покое, синхронизация останавливается через некоторое время. На системе работает другая служба, которая зависит от синхронизации. Эта служба продолжает работать, но выдает устаревшие результаты из-за отсутствующей синхронизации, и результаты не видны в облаке.
Когда я вхожу на сервер на Raspberry по SSH и получаю статус службы с помощью systemctl --user status onedrive
сразу после входа, я вижу, что клиент onedrive запустился сразу после моего входа, в то время как он должен был работать непрерывно без моего входа:
Dec 14 12:45:27 raspi-server onedrive[19550]: Конфигурационный файл успешно загружен
Dec 14 12:45:27 raspi-server onedrive[19550]: Сервер уведомлений (dbus) недоступен, отключение
Dec 14 12:45:28 raspi-server onedrive[19550]: Настройка глобальных конечных точек Azure AD
Dec 14 12:45:29 raspi-server onedrive[19550]: Инициализация механизма синхронизации...
Dec 14 12:45:29 raspi-server onedrive[19550]: Инициализация монитора...
Dec 14 12:45:29 raspi-server onedrive[19550]: Интервал мониторинга OneDrive (секунды): 300
Dec 14 12:45:29 raspi-server onedrive[19550]: Запуск синхронизации с OneDrive
Согласно документации на https://github.com/abraunegg/onedrive/blob/master/docs/USAGE.md#how-to-run-a-user-systemd-service-at-boot-without-user-login, я должен установить службу, используя команды systemctl --user enable onedrive
и systemctl --user start onedrive
, но сначала с su - root
. Я получаю ошибку аутентификации, используя su - root
. Если я делаю это без повышенных прав, синхронизация работает, но останавливается, когда я не в системе. Если я использую sudo systemctl --user enable onedrive
вместо использования su - root
, я получаю сообщение об ошибке Ошибка подключения к шине: $DBUS_SESSION_BUS_ADDRESS и $XDG_RUNTIME_DIR не определены (подумайте о использовании --machine=<user>@.host --user для подключения к шине другого пользователя)
. Связанная документация рассматривает аналогичное сообщение об ошибке, и для Ubuntu на Raspberry Pi первым шагом согласно документации является “Создайте символическую ссылку из /home/root/.config/onedrive на /root/.config/onedrive/”. Но у меня нет ни каталога /home/root/, ни /root/.config/, так что я застрял здесь.
Я не знаю, как выяснить, что не так с конфигурацией моей службы. Как я могу сделать так, чтобы служба onedrive работала непрерывно?
Правка:
Недостающим элементом была команда терминала
loginctl enable-linger <your_user_name>
которую я взял из принятого ответа, пункт 4. С этим теперь все работает как часы.
Раскрытие информации: Я разработчик клиента OneDrive для Linux – https://github.com/abraunegg/onedrive
Если я делаю это без повышенных прав, синхронизация работает, но останавливается, когда я не в системе.
Правильный процесс выглядит следующим образом:
-
Войдите как пользователь, не имеющий прав root.
-
Настройте приложение в соответствии с вашими требованиями и убедитесь, что оно работает, используя –synchronize –dry-run для одноразовой синхронизации.
-
Включите и запустите службу, необходимую для вашего пользователя без прав root, согласно https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#onedrive-service-running-as-a-non-root-user-via-systemd-with-notifications-enabled-arch-ubuntu-debian-opensuse-fedora.
systemctl --user enable onedrive; systemctl --user start onedrive
-
Включите вашу учетную запись для ожидания по следующему https://github.com/abraunegg/onedrive/blob/master/docs/usage.md#how-to-start-a-user-systemd-service-at-boot-without-user-login.
loginctl enable-linger <your_user_name>
Это правильный процесс, который был проверен множество раз.
Дополнительно, в будущем, пожалуйста, поднимайте вопрос здесь: https://github.com/abraunegg/onedrive/discussions, чтобы задать подобные вопросы.
Ответ или решение
Решение проблемы с остановкой службы OneDrive на Ubuntu с Raspberry Pi заключается в правильной настройке службы для автоматического запуска без необходимости входа в систему. Вот что вам следует сделать:
Шаги для настройки службы OneDrive:
-
Войдите в систему как некорневой пользователь.
Убедитесь, что вы используете пользователя, под которым вы хотите запустить службу OneDrive. -
Настройка приложения:
Настройте клиент OneDrive согласно вашим требованиям и проверьте, что он работает корректно. Для этого вы можете использовать команду:onedrive --synchronize --dry-run
Это позволит вам имитировать синхронизацию без внесения реальных изменений.
-
Включите и запустите службу OneDrive:
Используйте следующие команды, чтобы включить и запустить службу для вашего некорневого пользователя:systemctl --user enable onedrive systemctl --user start onedrive
-
Активируйте возможность «linger» для вашего пользователя:
Это ключевой шаг, который позволит вашему пользователю работать в фоновом режиме даже при отсутствии активной сессии. Выполните команду:loginctl enable-linger <ваше_имя_пользователя>
Замените
<ваше_имя_пользователя>
на ваше фактическое имя пользователя.
Проверка состояния службы:
После выполнения вышеперечисленных шагов вы можете проверить состояние службы OneDrive, используя:
systemctl --user status onedrive
Если все сделано правильно, вы увидите, что служба активна и работает.
Дополнительная информация:
Если на протяжении времени у вас возникают проблемы с синхронизацией или служба продолжает останавливаться, проверьте файлы логов, обращая внимание на ошибки, которые могут указывать на конкретные проблемы. Логи доступны с помощью команды:
journalctl --user -u onedrive
Также рекомендуется поддерживать актуальную версию клиентского приложения, обновляя его по мере выхода новых релизов.
Если у вас возникнут дополнительные вопросы или проблемы, вы можете обратиться в сообщество разработчиков через дискуссионную платформу GitHub.
Таким образом, следуя этим шагам, вы сможете настроить и запустить службу OneDrive на Ubuntu с Raspberry Pi без необходимости при этом оставаться в системе.