ロリポップでwgetとcronを使って、サーバにファイルを保存する方法
当サイトではアフィリエイト広告を利用しています。
とあるサイト運営の関係で別のサーバにある「xmlファイル」を定期的に最新のものに更新する必要があって色々とググった結果、なんとか完成することができたので忘れないうちに方法をまとめておきます(自分用のメモです)。
xmlファイルということで、察しの言い方はAPI関連だな、、
とわかると思いますが、xmlファイル以外でもデータを貰って自分の管理するサーバに入れてゴニョゴニョとやることは多いと思いますので、誰かの参考になるといいなと^^
<大まかなな流れ>
最終的には一気にやることになりますが、うまく動作しなかったときの分岐点も含めて考えるとサーバにファイルを保存するには、次の3つのフェーズがあります。
[Phase1]
→wgetを使ってファイルのダウンロード&ファイル名変更ができるようにする
[Phase2]
→Phase1で作ったものを元にシェルスクリプトを作成
[Phase3]
→ロリポップに装備されてる「cron」で定期的に更新させる
wgetを使ってファイルのダウンロード&ファイル名変更ができるようにする
実際に使った記述がこれ
[php]/usr/bin/wget -O /home/users/アカウント名/web/任意のディレクト/filename.xml http://ダウンロード先URL/ [/php]
少しだけ解説をつけると、
「/usr/bin/wget」がwgetを起動させる記述
「/home/users/アカウント名/web/任意のディレクト/」までが、ファイルを保存するディレクトリ
「filename.xml」がリネームするファイル名
「http://ダウンロード先URL/」はダウンロードするファイルのあるURL
wgetでは本来[-O コマンド]を使ってファイル名の変更、[-P コマンド]を使って保存するディレクトリを指定するのですが、併記するとうまくいかなかったので、上記のような書き方になっています。
駄目だった記述はこちら
[php]/usr/bin/wget -P /home/users/アカウント名/web/任意のディレクトリ/ http://ダウンロード先URL/ -O filename.xml[/php]
wgetがUNIXコマンドなので、Windows上でここだけをテストするのは難しいのですが、Windows版Wgetをダウンロードするとテストは可能になります。
参考サイト:Yorozu抄録
シェルスクリプトを作成
シェルスクリプトはPhase1で作ったものの前後に「#! /bin/sh」「exit」をつけて拡張子を[.sh]で作成すればOK。
[php]#! /bin/sh
/usr/bin/wget -O /home/users/アカウント名/web/任意のディレクトリ/filename.xml http://ダウンロード先URL/
exit[/php]
ここでの注意は、保存するときの改行コードをWindows用の「改行=CR+LF」ではなく、UNIX用の「改行=LF」に変更しておくこと。変更しないとうまく動作しないことがあります。
シェルスクリプトが完成したら、サーバの任意の場所にアップロードします。
自分の場合は、xmlファイルをダウンロードしたいディレクトリと同じ所にアップロードしました。
「cron」で定期的に更新させる
シェルスクリプトのアップロードが終わったら最後の仕上げを行います。
ロリポップのユーザー専用ページにアクセスし『cron設定』を開きます。
わかりやすい名前を「cronの設定名」につけ、Phase2でアップロードしたシェルスクリプトのパスを「実行ファイルパス」に入力します。
あとは、cronを起動させるタイミングを「日付(月)」「日付(日)」「曜日」「時間(時)」「時間(分)」と細かいですがすべて設定をし、「設定」ボタンをクリックすれば完了です。
設定が完了すると「設定済みcron一覧」に表示されます。
また、メールアドレス設定を行うとcronの実行結果を受信することができます。
→エラーメッセージも送られてくるので、テスト時は必ず設定をしましょう。
<参考>
実際の運用では1日1回程度でいいと思いますが、初めて設定するときは動作検証もあるので、5分程度にして設定をすぐ確認できるようにしたほうがいいですよ。
ただ、場合によってはサーバに大きな負荷をかけてしまう可能性があるためテストが終わったすぐに設定を戻すようしましょう(特にエラーの場合が怖い)。
cronを動かして、意図したディレクトリに意図した名前でファイルが保存されれば設定は完了になります。
<注意>
今回の設定は、ロリポップのチカッパプランでの設定になるので、他のプランやレンタルサーバではwgetの設定等々微妙に違ってくると思います。
その辺の微調整に関しましてはわからないので、契約しているレンタルサーバに確認するなり対応していただけると助かります。
さて、、、
これができたことで、APIに関わる部分の9割は終了したので、コンテンツを作る方に意識を向けないと^^
Sponsored Links