LINUX.ORG.RU

Автозапуск rclone не даёт загрузиться десктопу

 


0

1

Я использую rclone для синхронизации с облачными хранилищами.

X-сессия не запускается без интернета, если настроен автозапуск rclone.

Если автозапуск организовывать через ~/.xsessionrc, то получается просто чёрный экран без курсора сразу после логина через GDM.

Если автозапуск организовывать через .desktop-файлы в ~/.config/autostart, то показывается загрузочный логотип KDE Plasma, а чёрный экран наступает после него с доступным курсором мыши.

Надо в третий раз переделывать автозапуск? Теперь на пользовательский сервис systemd или ещё что-то?

★★★★★

X-сессия не запускается без интернета

Ну так, можно же реализовать проверку наличия этого самого интернета, и при его отсутствии не запускать rclone?

Или задержку сделать, позволив иксам прогрузиться, как вариант.

krasnh ★★★★
()
Последнее исправление: krasnh (всего исправлений: 1)

вообще запуск консольных сервисов через примочки граф.интерфейса подванивает виндой :)

рклоун у тебя не привязан к граф.среде соответственно и жить должон отдельно.
как уже выше сказали - пишешь сервис type=oneshot и все ок.
посоветую прописать User= Group= или запускать от systemd –user удобнее будет и пользователь не привилегированный и с правами нет проблем.
ну и After=network.target пропиши, коль сеть не всегда рабоча.
можно еще .timer дописать чтоб рклоуна периодически пинали на синхронизацию.
вообще много чего можно докумекать, главное правильный инструмент взять, а не первый попавшийся под мышку :)

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

Вот конфиг:

[Unit]
Description=Google Drive fishgalov account mount
After=network-online.target

[Service]
ExecStart=/usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf
Restart=on-failure
User=eugrus

[Install]
WantedBy=default.target

Но что-то идёт не так:

× googledrive-fishgalov.service - Google Drive fishgalov account mount
     Loaded: loaded (/home/eugrus/.config/systemd/user/googledrive-fishgalov.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Thu 2024-06-20 16:16:51 CEST; 1min 37s ago
   Duration: 386us
    Process: 45189 ExecStart=/usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf (code=exited, status=216/GROUP)
   Main PID: 45189 (code=exited, status=216/GROUP)
        CPU: 0

июн 20 16:16:51 eugensdebianpc systemd[1131]: googledrive-fishgalov.service: Scheduled restart job, restart counter is at 5.
июн 20 16:16:51 eugensdebianpc systemd[1131]: Stopped googledrive-fishgalov.service - Google Drive fishgalov account mount.
июн 20 16:16:51 eugensdebianpc systemd[1131]: googledrive-fishgalov.service: Start request repeated too quickly.
июн 20 16:16:51 eugensdebianpc systemd[1131]: googledrive-fishgalov.service: Failed with result 'exit-code'.
июн 20 16:16:51 eugensdebianpc systemd[1131]: Failed to start googledrive-fishgalov.service - Google Drive fishgalov account mount.
eugrus ★★★★★
() автор топика
Ответ на: комментарий от eugrus

code=exited, status=216/GROUP

Интернет подсказывает, что не надо User=eugrus, достаточно запускать systemd --user.
Но лучше, конечно, спросить @intelfx, как признанного лоровского специалиста по systemd.

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

Интернет подсказывает, что не надо User=eugrus, достаточно запускать systemd –user

Разные области, разные задачи. Но здесь лучше пользовательский сервис, да.

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

Не монтирует каталог «нормально» при запуске из systemd:

eugrus@eugensdebianpc:~$ cat ~/.config/systemd/user/googledrive-fishgalov.service 
[Unit]
Description=Google Drive fishgalov account mount
After=network-online.target

[Service]
ExecStart=/usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf --daemon
Restart=on-failure

[Install]
WantedBy=default.target
eugrus@eugensdebianpc:~$ systemctl --user start googledrive-fishgalov
eugrus@eugensdebianpc:~$ ls ~/googledrivefishgalov 
ls: невозможно получить доступ к '/home/eugrus/googledrivefishgalov': Конечная точка передачи не подсоединена

Хотя «как будто» примонтировано:

eugrus@eugensdebianpc:~$ /usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf --daemon &
[1] 150158
eugrus@eugensdebianpc:~$ Fatal error: directory already mounted, use --allow-non-empty to mount anyway: /home/eugrus/googledrivefishgalov
^C
[1]+  Выход 1            /usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf --daemon

Если демонтировать и запустить rclone из консоли, то работает норм:

eugrus@eugensdebianpc:~$ fusermount -u /home/eugrus/googledrivefishgalov
eugrus@eugensdebianpc:~$ /usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf --daemon &
[1] 150251
eugrus@eugensdebianpc:~$ ls ~/googledrivefishgalov 
notebooks

Из systemd, опять таки, нет:

eugrus@eugensdebianpc:~$ killall rclone
eugrus@eugensdebianpc:~$ fusermount -u /home/eugrus/googledrivefishgalovfusermount: entry for /home/eugrus/googledrivefishgalov not found in /etc/mtab
eugrus@eugensdebianpc:~$ systemctl --user start googledrive-fishgalov
eugrus@eugensdebianpc:~$ ls ~/googledrivefishgalov ls: невозможно получить доступ к '/home/eugrus/googledrivefishgalov': Конечная точка передачи не подсоединена
eugrus ★★★★★
() автор топика
Ответ на: комментарий от intelfx

systemctl status кто будет показывать?

Виноват!

Вот после логина с моим предыдущим конфигом:

○ googledrive-fishgalov.service - Google Drive fishgalov account mount
     Loaded: loaded (/home/eugrus/.config/systemd/user/googledrive-fishgalov.service; enabled; preset: enabled)
     Active: inactive (dead) since Tue 2024-06-25 01:29:26 CEST; 20min ago
   Duration: 5.195s
   Main PID: 1426 (code=exited, status=0/SUCCESS)
        CPU: 293ms

июн 25 01:29:21 eugensdebianpc systemd[1117]: Started googledrive-fishgalov.service - Google Drive fishgalov account mount.

Type=forking?

Попробовал. Теперь вот так:

× googledrive-fishgalov.service - Google Drive fishgalov account mount
     Loaded: loaded (/home/eugrus/.config/systemd/user/googledrive-fishgalov.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Tue 2024-06-25 01:53:08 CEST; 14s ago
   Duration: 360ms
    Process: 21992 ExecStart=/usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf --daemon (code=exited, status=1/FAILURE)
        CPU: 102ms

июн 25 01:53:08 eugensdebianpc systemd[1117]: googledrive-fishgalov.service: Scheduled restart job, restart counter is at 5.
июн 25 01:53:08 eugensdebianpc systemd[1117]: Stopped googledrive-fishgalov.service - Google Drive fishgalov account mount.
июн 25 01:53:08 eugensdebianpc systemd[1117]: googledrive-fishgalov.service: Start request repeated too quickly.
июн 25 01:53:08 eugensdebianpc systemd[1117]: googledrive-fishgalov.service: Failed with result 'exit-code'.
июн 25 01:53:08 eugensdebianpc systemd[1117]: Failed to start googledrive-fishgalov.service - Google Drive fishgalov account mount.

Вот ещё полный лог из журнала: https://pastebin.com/raw/vi6Cbg72

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

Короче.

[Unit]
Description=Google Drive fishgalov account mount
After=network-online.target

[Service]
ExecStart=/usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf --daemon
Restart=on-failure

[Install]
WantedBy=default.target
  1. У тебя Restart=on-failure, но при аварийном завершении FUSE-процесса после него остаётся висячая точка монтирования, препятствующая повторному запуску того же процесса. Тебе нужен ExecStopPost=-/usr/bin/fusermount -u /home/eugrus/googledrivefishgalov.

  2. Либо без --daemon, либо Type=forking.

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

Тебе нужен ExecStopPost=-/usr/bin/fusermount -u /home/eugrus/googledrivefishgalov

Теперь ls ~/googledrivefishgalov просто выдаёт пустой каталог. Т.е. демонтируется-да, но не монтируется.

○ googledrive-fishgalov.service - Google Drive fishgalov account mount
     Loaded: loaded (/home/eugrus/.config/systemd/user/googledrive-fishgalov.service; enabled; preset: enabled)
     Active: inactive (dead) since Tue 2024-06-25 15:59:15 CEST; 1min 31s ago
   Duration: 1.295s
    Process: 156312 ExecStart=/usr/bin/rclone mount googledrivefishgalov: /home/eugrus/googledrivefishgalov --config /home/eugrus/.config/rclone/rclone.conf --daemon (code=exited, status=0/SUCCESS)
    Process: 156342 ExecStopPost=/usr/bin/fusermount -u /home/eugrus/googledrivefishgalov (code=exited, status=0/SUCCESS)
   Main PID: 156312 (code=exited, status=0/SUCCESS)
        CPU: 273ms

июн 25 15:59:14 eugensdebianpc systemd[1117]: Started googledrive-fishgalov.service - Google Drive fishgalov account mount.
июн 25 16:03:18 eugensdebianpc systemd[1117]: Started googledrive-fishgalov.service - Google Drive fishgalov account mount.
░░ Subject: Запуск юнита UNIT завершен
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ Процесс запуска юнита UNIT был завершен.
░░ 
░░ Результат: done.
июн 25 16:04:53 eugensdebianpc systemd[1117]: Started googledrive-fishgalov.service - Google Drive fishgalov account mount.
░░ Subject: Запуск юнита UNIT завершен
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ Процесс запуска юнита UNIT был завершен.
░░ 
░░ Результат: done.
eugrus ★★★★★
() автор топика
Ответ на: комментарий от eugrus

Ну, я не поленился и засетапил себе rclone с гуглодиском, чтобы проверить самостоятельно:

# /home/intelfx/.config/systemd/user/rclone-mount@.service
[Unit]
Description=Rclone mount %I: on ~/mnt/%I
After=network-online.target

[Service]
Type=forking
ExecStartPre=-/usr/bin/mkdir -pv %h/mnt/%I
ExecStart=/usr/bin/rclone mount %I: %h/mnt/%I --config %E/rclone/rclone.conf --daemon
ExecStopPost=-/usr/bin/fusermount -u %h/mnt/%I
Restart=on-failure

[Install]
WantedBy=default.target
$ systemctl --user status rclone-mount@intelfx.name.service
● rclone-mount@intelfx.name.service - Rclone mount intelfx.name: on ~/mnt/intelfx.name
     Loaded: loaded (/home/intelfx/.config/systemd/user/rclone-mount@.service; disabled; preset: enabled)
     Active: active (running) since Wed 2024-06-26 08:29:42 CEST; 49s ago
 Invocation: e2f44d9b17dc4557975729e67306804f
    Process: 1538755 ExecStartPre=/usr/bin/mkdir -pv /home/intelfx/mnt/intelfx.name (code=exited, status=0/SUCCESS)
    Process: 1538757 ExecStart=/usr/bin/rclone mount intelfx.name: /home/intelfx/mnt/intelfx.name --config /home/intelfx/.config/rclone/rclone.conf --daemon (code=exited, status=0/SUCCESS)
   Main PID: 1538770 (rclone)
         IO: 0B read, 0B written
      Tasks: 14 (limit: 19040)
     Memory: 31.5M (peak: 61.1M)
        CPU: 480ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/app-rclone\x2dmount.slice/rclone-mount@intelfx.name.service
             └─1538770 /usr/bin/rclone mount intelfx.name: /home/intelfx/mnt/intelfx.name --config /home/intelfx/.config/rclone/rclone.conf --daemon

Jun 26 08:29:40 able systemd[1378]: Starting Rclone mount intelfx.name: on ~/mnt/intelfx.name...
Jun 26 08:29:40 able mkdir[1538755]: /usr/bin/mkdir: создан каталог '/home/intelfx/mnt/intelfx.name'
Jun 26 08:29:42 able systemd[1378]: Started Rclone mount intelfx.name: on ~/mnt/intelfx.name.

Всё работает как надо. rclone v1.66.0. Ищи где у тебя что не так, можешь попробовать с rclone mount -vv.

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

Type=forking

ExecStart=/usr/bin/rclone mount %I: %h/mnt/%I --config %E/rclone/rclone.conf --daemon

А как же вышесказанное «Либо без –daemon, либо Type=forking»? Это опечатка или это не имеет определяющего значения?

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

А в чём противоречие?

Есть два валидных варианта запуска этой программы: либо с --daemon и Type=forking, либо без --daemon и Type=simple (что есть дефолт).

В моём случае используется первый вариант.

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

ввобще не понял зачем этот режим создан :)
учитывая, что под виндовс (там где основная проблема с запуском в фоне) эта опция аккурат и не работает…

pfg ★★★★★
()
22 сентября 2024 г.