web-dev-qa-db-ja.com

接続が利用可能なときにfstabでFTPリソースをマウントする方法は?

curlftpfsを使用してFTPフォルダーを自動マウントしたいのですが、fstabに次のような行を入れます。

curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder Fuse allow_other,uid=1000,gid=1000,umask=0022,_netdev 0 0

起動中はネットワーク(通常はWi-Fi)がラップトップで使用できないため、通常は機能しません。 fstabの_netdevオプションを読むと、ネットワークが利用可能な場合にのみマウントが保証されるはずですが、次のメッセージが表示されます。

Error connecting to ftp: Couldn't resolve Host myhost

別の方法として、ログイン後に自動実行スクリプトでリソースをマウントすることもできますが、もっと多くのfstabソリューションが必要です。

最後の目標は、ローカルフォルダーとftpフォルダーをcrontab rsyncで同期することです。他の提案があれば、感謝します!

6
jasmines

あなたの目標は「ローカルフォルダーをcrontab rsyncを使用してftpフォルダーと同期させる」ことなので、FTP、rsync、unmount FTPをマウントする小さなスクリプトを作成することをお勧めします。次に、crontabからこのスクリプトを実行します。

次のようになります。

#!/bin/bash
curlftpfs user:pwd@myhost:port/folder/ /mnt/mymountfolder
#might need sleep 1 here
rsync -a /mnt/mymountfolder /local/folder
fusermount -uz /mnt/mymountfolder

スクリプトで必ずchmod + xを実行してください。

crontab -e

#m h d M wd
0 * * * * /usr/local/bin/backup-script

また、FTPフォルダーを常にマウントしたい場合は、ドライブをマウント/アンマウントするスクリプトを作成できます。 fstabにも追加する場合は、ドライブを手動でマウントできます。

fstab:

curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder Fuse noauto,user,uid=1000,gid=1000,umask=0022 0 0

network-mount.sh:

#!/bin/bash
folder=/media/ftp
# check if Host is alive
ping=`/usr/bin/fping -q Host.dyn.org`
if [ $? == 0 ]; then
  # check if folder is mounted
  mountpoint $folder > /dev/null
  if [ $? != 0 ]
    # mount, timeout in case something goes wrong
    then timeout 10s mount $folder
  fi
  else
  mountpoint $folder > /dev/null
  if [ $? = 0 ]
    #unmount lazy (network down)
    then umount -l $folder
  fi
fi

これをcrontabに追加します(crontab -e):

* * * * * /usr/local/bin/network-mount.sh

また、次が実行される前にrsyncが完了しないことに注意してください。これは、自動的に(rsyncが実行されているかどうかを確認する)、または同期する必要があるデータの量(rsyncにかかる時間、最悪の場合のシナリオ)に基づいて実行できます。

他の目的でrsyncを実行しないと仮定すると、実行中かどうかは次のように確認できます。

pgrep rsync
if [ $? == 0 ]; then
  # rsync running
  exit
else
  # rsync not running
  #do stuff
fi
9
arve0

Curlftpfsオプションを試すことができます

connect_timeout = N(秒)。

あなたの例では(30秒で十分だと言ってください)、

curlftpfs#user:pwd @ myhost:port/folder// mnt/mymountfolder、uid = 1000、gid = 1000、umask = 0022、connect_timeout = 30 0 0 Fuse -o allow_other

または、fstabから削除してNautilusに接続し、ブックマークとして保存して起動するたびに接続することもできます。

0
bob

私はその目的のためにSFTP/sshfsを使用しています

echo password | sshfs username@serverIP:/ /mnt/mountpointfolder -p portnumber -o reconnect -o password_stdin

Fstabの方法があるかどうかはわかりません。 x分ごとにこれを行うcronジョブを実行する場合は、問題ありません。フォルダが既にマウントされている場合、「接続済み」エラーが表示されます。接続が切断されている場合、別のエラーが発生し、接続は確立されません。しかし、再び接続すると、すぐに接続します... cronジョブの場合は、-o reconnect部分を削除できます。

パスワードが含まれているため、スクリプトファイルを安全にします。

0
Dee