やりたい事
さくらのクラウドにUbuntuで構築したFileMakerのファイルを別サーバーにFTP転送してバックアップしたい。
レンタルサーバーにFTPアカウントを発行
自分が利用しているHetemlレンタルサーバーは、200GBの容量があるので、バックアップ先としても利用しています。
FTPでログインすると、ログインフォルダにダイレクト接続になるので便利です。
いちおう、WinSCP(FTPクライアント)で接続試験をしておきました。
ubuntuにlftpをインストール
インストールは、ほんの数秒で終わりました。
sudo apt install lftp
転送スクリプトをBingAIで作成
今回は、FileMakerServerのデータベースをバックアップが目的なので、BingAIから転送用スクリプトを質問しました。
ココがおすすめ
最近はサイト検索するよりも、ChatGPTや、BingAIチャットから調べたほうが早いです。
スクリプトを作成するだけでもひと苦労
普段はWindowsしか使わないので、Linuxの仕組みがよくわかってないので、スクリプトを作成するだけでもひと苦労です。
そして、まず、そのスクリプトは、どこに置けばいいのか?と言う旅から始まりました。
Qiitaにて、参考になるサイトがあったので、/usr/binに置くことにしました。
まずは、「vi fmsftp.sh」にてviエディターにて新規スクリプトファイルを作成しました。
いつもながら、viエディターの使い方は難しいです。
https://pctips.jp/server/linux-howto-vi2019/
なんとか、viエディターを使ってコードを入力しましたが、
ココに注意
:wqでやるとエラーが出て保存されません。
ネット検索して、強制保存する方法というのがあり、下のコマンドを入れました。
:w !sudo tee % > /dev/null
なんだか保存されたかわからないので、再びviで開いてみると保存されていました。
しかし、編集後に保存ができません。
確実に権限の問題と判断できましたので、下記のコマンドを実行しました。
root権限から、ubuntuに変更しました。
sudo chmod u+w fmsftp.sh
などもやり権限を変更しました。
そうると、編集もできるし、実行もできるようになりました。
スクリプトエラーに泣かされる
スクリプトを実行すると、フォルダー関係のエラーがでました。
DIR='/opt/FileMaker/FileMaker Server/Data/Databases/'
この部分の記述が違うようです。
そして、これに気づくまで無駄な時間が経過してようやくわかった事が、
ココがポイント
フォルダー名にスペースがある場合は、カンマ(ダブルカンマでも行けるようです。)で囲む
DIR='/opt/FileMaker/'FileMaker Server'/Data/Databases/'
これでエラーが解消されましたが、対象フォルダ内のファイルが転送されないで変なファイルが転送されるようになりました。
これに気づくまでにも時間を要しました。
ココに注意
cdは、接続先のほうで、lcdが接続元のフォルダになる
今回の自分の環境は、接続先のレンタルサーバーでは、接続すると指定されたフォルダしか開かないので特に設定は必要ありません。
むしろ、接続元のubuntuのフォルダー指定をしなければならないのですが、lcdというのを気づくのが大変でした。
結果、うまく行ったスクリプトは下記のようになりました。
#!/bin/bash HOST='ftp.example.com' USER='yourusername' PASSWD='yourpassword' DIR='/opt/FileMaker/'FileMaker Server'/Data/Databases/' lftp -u $USER,$PASSWD $HOST << EOF lcd $DIR mput *.fmp12 EOF
これで、ファイルメーカーのデータベースファイルを別サーバーに転送することができるようになりました。
スクリプトを定期実行
せっかくスクリプトを作成しても手動だと意味がありません。
ubuntuにて、crontabの設定方法を参考に実行してみました。
ちなみに、crontabの編集モードに入ると、3種類のエディター選択になりますが、自分は、vim(viに似ている)を選択して下記のコードを追加しました。
毎日、23時59分に定期実行して、別サーバーに転送するようにしました。
明日にでもバックアップができているか確認してみたいと思います。
FileMaker Serverのバックアップ
FileMaker Serverのバックアップは、サーバーの方で、7日間自動バックアップされています。
それなら、わざわざ外部サーバーにバックアップする必要ないんじゃないの?
ココに注意
サーバー自体が死んじゃったら、どうやってデータを復活させればいいんだ!?
そういう訳で、せめて毎日の作業終了時点のファイルだけでもあれば、最新版のデータベースが復活させることができますので、外部サーバーにファイル転送してバックアップする方法を考えた訳です。
もちろん、クラウドサーバーじゃなくて、自前のサーバーとかなら、外付けHDDなど接続して、バックアップが可能ですけどね。