LINUX.ORG.RU
ФорумAdmin

Служба на монтирование папок ftp при старте

 


0

1

Здраствуйте, пытаюсь написать службу которая бы монтировала 2 ftp папки при загрузке системы, но пока безуспешно. Написал скрипт:

curlftpfs x.x.x.x /home/profile/ftp1 - o user=user:pass
curlftpfs x.x.x.x /home/profile/ftp2 - o user=user:pass

просто так скрипт отрабатывает и монтирует его. После этого попробовал написать службу
[Unit]
Description=Mount ftp
[Service]
User=profile
ExecStart=/bin/bash /home/profile/scripts/mountftp.sh
Restart=always
[Install]
WantedBy=multi-user.target

но она нормально не стартует, подскажите что я делаю неправильно?

ну к примеру сия служба не дожидается работоспособности сети. нужно что такое

Wants=network-online.target    
After=network-online.target

спробуй запустить сервис вручную - если монтирует, то значит так оно и есть.

посоветую еще выкинуть баше-прокладки - удобнее и нагляднее будет.
и изучить специальный юнит systemd.mount который и создан для монтирования.

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

network-online.target

Перед этим нужно проверить, что эти таргеты возникают, когда сеть точно поднята. Для этого всякие wait-online костыли есть для разных систем управления сетью. Сам на подобном спотыкался.

В смысле не скриптовую обвязку добавлять, а проверить на конкретной системе один раз.

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

дык я полностью согласен, что прежде чем корежить систему под себя, надо в ней немного разобраться. потому и сказал «нужно что-то такое» - не конкретно ентое, а то что в системе наконфигурировано…. к примеру сетевых соединений может быть несколько и не обязательно их ждать все (те же самый впны).
но тс не удосужился уточнить параметры, так что просто ответ получился общефилософский…

pfg ★★★★★
()
Ответ на: комментарий от t184256
● ftp210.service - Mount ftp
   Loaded: loaded (/usr/lib/systemd/system/ftp.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2022-10-18 14:30:00 +03; 1h 21min ago
  Process: 1006 ExecStart=/home/profile/scripts/mount.sh (code=exited, status=203/EXEC)
 Main PID: 1006 (code=exited, status=203/EXEC)

окт 18 14:30:00 erip systemd[1]: ftp.service: Service RestartSec=100ms expired, scheduling restart.
окт 18 14:30:00 erip systemd[1]: ftp.service: Scheduled restart job, restart counter is at 5.
окт 18 14:30:00 erip systemd[1]: Stopped Mount ftp.
окт 18 14:30:00 erip systemd[1]: ftp.service: Start request repeated too quickly.
окт 18 14:30:00 erip systemd[1]: ftp.service: Failed with result 'exit-code'.
окт 18 14:30:00 erip systemd[1]: Failed to start Mount ftp.
Sobaka66
() автор топика
Ответ на: комментарий от pfg

Ну да там несколько соединений (2 ip адреса один vpn), но скрипт отдельно выполняется.

Wants=network-online.target    
After=network-online.target


в Unit добавлять надо?
а про какие баш прокладки вы имеете ввиду , bash_profile ?
Sobaka66
() автор топика
Ответ на: комментарий от Sobaka66

Ну да там несколько соединений (2 ip адреса один vpn), но скрипт отдельно выполняется.

конечно отдельно, но зависимости юнитов меж собой системд отрабатывает и запускает их только при выполнении условий.
в впн думаю тоже прописан запуск после network-online.target, ибо впн нужна сеть, без нее он отвалится с ошибкой.
а где-то в завалах системд есть юнит или несколько юнитов в которых прописано Before=network-online.target (или что подобное) и вот только после их выполнения, системд посчитает нетворк-онлайн.таргет выполненной и запустит скрипты в которых стоит требование After=network-online.target «только после (работоспособности) network-online.target»

в Unit добавлять надо?

ну а куда еще :) ты описываешь взаимодействие данного юнита с окружающей средой https://systemd.io/NETWORK_ONLINE/

а про какие баш прокладки вы имеете ввиду , bash_profile ?

не :)
я про прокладку из баша чтобы запустить башескрипт. вот такое ExecStart=/bin/bash /home/profile/scripts/mountftp.sh излишне. зачем дробить задачу между несколькими файлами ??
в сервис можно воткнуть несколько ExecStart подряд

ExecStart=/path/to/curlftpfs x.x.x.x /home/profile/ftp1 - o user=user:pass
ExecStart=/path/to/curlftpfs x.x.x.x /home/profile/ftp2 - o user=user:pass

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

далее добавь в юнит Type=oneshot это более правильно, ExecStart выполняется мгновенно а юнит считается рабочим долгое время.

плюс непонятно у тебя точно есть юзверь profile ?? или User=profile впихнуто от балды. что-то я такого юзера в дефолтных не встречал.

и стоит добавить опции отмонтирования директорий перед выключением сервиса. нехрен их бросать незавершенными.

ExecStop=/usr/bin/umount ****1
ExecStop=/usr/bin/umount ****2

пардон не игрался с curlftps и не знаю как их правильно отмонтировать. и у тебя получается полноценный сервис, который можно включить, т.е. получить доступ к смонтированным фтпшникам и выключить его, адектвано отключив все фтп-папки.
#кактотак :)

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

Вместо curlftpfs можно использовать rclone. Он умеет ещё и облака подключать, даже те которые не умеют или не дают доступа через WebDAV.

theurs ★★
()