rclone монтирует том автоматически через bashrc при запуске - PullRequest
0 голосов
/ 22 сентября 2019

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

Поэтому я устанавливаю небольшой shell-скрипт со следующим содержимым:

rclone mount remoterep:/examplefolder ~/Documents/examplefolder

и вызываю его в bashrc с помощью exec ~ / mount_examplefolder

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

Если я добавляю еще одну учетную запись ssh, я получаю сообщение об ошибке, поскольку он не может перезаписать папку монтирования из другого сеанса.Так как мне исправить это, чтобы rclone выполнялся в фоновом режиме, предоставляя мне доступ к оболочке обратно?

Или я ограничен монтированием вручную и последующим использованием другого сеанса ssh для выполнения желаемых действий?

1 Ответ

2 голосов
/ 22 сентября 2019

Здесь есть пара вещей, которые вызывают некоторые проблемы.

Во-первых, когда вы используете exec для запуска процесса в оболочке, это означает, что вы хотите заменить существующую оболочкуобработайте с программой, которую вы упомянули.Когда вы делаете это в сеансе SSH, вы заменяете процесс оболочки, запущенный демоном SSH (и вы намеревались использовать его для входа в систему).Затем SSH будет ждать завершения этого процесса (чего не произойдет, пока том не будет отключен), поэтому вы видите зависание.Вы можете пропустить exec в конфигурации вашей оболочки, которая будет порождать процесс без замены вашей оболочки.

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

#!/bin/sh

if ! grep " $HOME/Documents/examplefolder " /proc/mounts
then
    rclone mount remoterep:/examplefolder ~/Documents/examplefolder
fi

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

В-третьих, вы, вероятно, захотите выполнить эту команду в фоновом режиме и отсоединиться от оболочки, чтобы выход из оболочки незаставить его получить SIGHUP и выйти (или перезапустить, в зависимости от того, как он настроен).Вы можете сделать это, записав вызов в вашей конфигурации оболочки как nohup ~/mount_examplefolder >/dev/null 2>&1 &.nohup запрещает программе получать SIGHUP, а перенаправление вывода запрещает ей печатать сообщения или создавать файлы nohup.out повсюду.

Наконец, вы можете (или не можете) настроить это назапускать только при использовании интерактивной оболочки;то есть, когда вы входите в систему, чтобы запустить оболочку для интерактивного использования, а не использования сценариев.Если это так, вы можете сделать вызов условия nohup для PS1 следующим образом:

if [ -n "$PS1" ]
then
    nohup ~/mount_examplefolder >/dev/null 2>&1 &
fi
...