サーバ設定:cronでwgetを使って動かす方法(共有レンタルサーバ用)

cronでwgetを使う

wget で認証付きサイトをダウンロードする – WebOS Goodies
ここにほとんど回答があるんですが、一応自分の作業ログなので。

このTIPSは、そもそも専用サーバでは、たぶん必要ありません。
共有のレンタルサーバ(今回はsixcore)でcronを実行したい場合の裏技?的な方法です。

専用サーバと共有サーバの違い

まあ契約形態がどうだとかの違いは当然あるんで、省略。
このcronという処理において上記の違いがどこにあるかということが非常に重要なことです。

1.ファイルパス
当然ながら専用サーバは、サーバまるまる一個ですんでroot権限がありファイルパスも自由に設定ができます。
Windows的に言えば、Cドライブの直下から眺められます。

共有サーバは、root権限の人が何かしらのユーザー権限を発行しています(大体は申し込み時のドメイン名やID名など)。
そのためWindows的に言えば、Cドライブ内のマイドキュメント内にユーザーフォルダが出来上がるみたいな形になります。

共有サーバ側では、ログイン権限がrootではないのでFTPやファイルマネージャなどで見えるファイルパスと、cronで指定するパスは異なってくるはずです。
(cronを動かす際にhogehoge.phpみたいなものを起動するわけですが、cronで指定するパスは絶対パスになります。共有サーバのFTPなどで見れるパスでは上の方のパスが含まれていないので不十分です)

2.権限について
これもサーバ設定によってcronの動作自体を権限で縛っている場合があります。
特にroot権限でないとcronは起動できませんとかがあります。専用サーバならなにも問題ないわけですが。
共有サーバの場合、そもそもcronが使える使えないという制限がある場合があり事前に確認すべきです。

またcronの動作が確認できたとしても、rootユーザでcronを動かすわけではないので、phpが起動できないとか別の権限で制限がかかる場合があります。

なんでwgetを使うの?
本題。

冒頭で紹介したwgetというコマンドラインを使って動かそうという結論に至るわけですが、先に書いた専用サーバと共有サーバの違いが非常に重要になります。
専用サーバは先ほど書いたように自分でやれ!ってことと、やれる!ので、割愛します。

問題は共有サーバの方なのです。
特に、cron の設定ガイドを参考にしたような設定方法での処理は、専用サーバなら通用するものの先にあげたファイルパス(画面などで見られるファイルパスは虚像であること)の問題、そもそもcron動かないんじゃないの?という権限の問題があって、うまく設定したつもりでもほとんどが上手くいきません。

ってことで、どうするか。

サーバ内で処理できないなら、外部アクセス(httpプロトコルなど)で処理しちまえ!ってことになります。
ということでwgetの出番になるわけです。

cronにおけるwgetの具体的設定

wget で認証付きサイトをダウンロードする – WebOS Goodies
ここを見ろ。ってことに尽きるw

基本概要は上記ウェブサイトを見てもらうとして、「認証をパスする方法」が今回胆になります。
ベーシック認証や、Wordpressやmodxのような管理者ログインが必要なものなどは、この認証をパスしないとcron処理が動作しません。

今回自分はPliggで試してますが、一部のプログラムをcronで叩く際に、pliggに対して管理者ログインしないといけませんでした。

胆としては、「ログインしていること」をcron上で認識することなので、cookieを持っている必要があります。
Cookieを読み込ませて擬似的にログインした状態として認識させてcronを叩くわけです。

1.cookieの出力
「永続的な Cookie による認証の場合」の場合でやってみます。

IE の場合は、以下の手順になります。

1. IE を起動し、対象の Web サイトにログインする。
2. メニューから [ファイル]-[インポートおよびエクスポート]を選択。
3. ウィザードに従い、 Cookie をファイルにエクスポートする。
4. エクスポートされたファイルが Cookie ファイルになります。

この通りの手順でやってみましょう。ちなみに試したVerではIEは8です。

適当なPliggのサイトです。適当にニュースもインポートしてあります。
右上のログインからログインします。
Pligg

IEの「ファイル」→「インポートおよびエクスポート」を選びます。
Cookieの出力

「ファイルにエクスポート」を選択。
Cookieの出力

「Cookie」を選択。
Cookieの出力

出力先とファイル名(ex: cookie.txt)を選択。
Cookieの出力

これで「cookie」が出力されました。このファイルをFTPでアップロードします。
出来ればpublic_htmlなどのHTMLが入る(=httpでアクセスする)エリアではないところ、public_htmlなどの同階層ないしは上の階層にtxtをアップロードしましょう。

cronの設定としては、

<br />
wget --load-cookies=/home/USERNAME/HOGEHOGE.com/cookies.txt http://www.HOGEHOGE.com/module.php?module=rss_import_do_import<br />

こんな感じに。

–load-cookies=/home/USERNAME/HOGEHOGE.com/cookies.txt
ここが大事で、
「–load-cookies」の値として「/home/USERNAME/HOGEHOGE.com/cookies.txt」を指定しています。
このファイルパスのcookie.txtを読んでねということです。

http://www.HOGEHOGE.com/module.php?module=rss_import_do_import
はPliggのとあるモジュールを指定してるだけ。動かしたいプログラムのURLをぶち込んでください。

※PHPのURLにパラメータを付与することが出来れば動くのにーみたいに考えていた人にはバッチリなはず。
※ファイルパスわからねーけどURLはわかるわ って人にもバッチリ。

機械忍者

某SEO会社(?)勤務。 多分日本語よりHTMLの方が得意です。 最近はRubyとかいうキラキラな言語も勉強中です。 SEOはもう標準スキルになってきてると思うので正直もうあんまり昔ほどの熱意は感じません。 新たに躍動してる人も多いですしね。 だれか強化骨格コスプレあったら教えてください。