005:CRONを使ってPHPスクリプトを自動的に実行対象言語:PHP / UNIX Crond Daemon
|
||||||||||||
キーワード:cron crontab -e php vi 自動 定時 実行 Linux BSD UNIX telnet レンタルサーバー | ||||||||||||
Unix系のサーバ−OSでは、シェルコマンドやスクリプトを定時に自動実行(例えば毎月25日の午前4:00にメール、とか)するためのコマンド:crontab(クロンタブ)が用意されています。
Webに携わる人はある段階でこのcronを意識することになります。
自前でLinuxやBSDなどでサーバー運用している方にとってはさほでなくとも、レンタルサーバで自分のページを運用しているなら、このcronは便利である反面とてもとっつきにくものでもあります。
レンタルサーバーの運営方針によってはcronを使わせて貰えない場合もありますし、反対にとても親切にツールを使ってcronの設定を容易にしてくれる場合もあるみたいです(聞いた話で)。
<?php //元のPHPスクリプト:「test.php」
//MySQL接続用ファイルを同一ディレクトリから読み込む
理総研は、とってもクールなホスティング会社「NeXt Web(ネクストウェブ)」のレンタルサーバー上で稼働しています。
勝手に宣伝しておきますけど、ネクストウェブはあまりにクールすぎて使いこなすには借りる人のスキルが結構試されます。ですが逆に言えば、その手の人にとっては(管理人も含めて)サポート・安定性、何をとっても満足度の高いホスティング会社とも言えます。
さて、あまりにクールなネクストウェブではそのFAQにcronの利用について一切何も書かれていません。使って良いのかどうかも分からないのでとりあえずTelnet接続してみたら、繋がった上にcron設定もできたので、この一連の流れは他サーバーの方にも有効な情報になるのではないかと思いまして。
右上のようなコードを記述した「test.php」を例に書いていきます。test.phpはそれ単体でサーバにアップすれば動くもので、その際に外部ファイルをincludeしています。特別なツールがない場合、cronの設定はtest.phpを適切に設置することよりも先にサーバーとあなたがTelnetで通信できる状態にあるか知っておかないといけません。
include("database_login.pl"); //条件に合致したデータを削除 $sql = "DELETE FROM `test` WHERE `name` = 'risouken'"; $result = mysql_query($sql,$link) or die(mysql_error()); ?> |
||||||||||||
1: まずはTelnet接続・・・コマンドプロンプトに「telnet」と打ち込んでEnter
Microsoft Windows -- [Version -.-.----] (C) Copyright 1985-2001 Microsoft Corp. C:\> telnetするとこうなる。 Microsoft Telnet クライアントへようこそ エスケープ文字は 'CTRL+]' です Microsoft Telnet> //ファイル名を指定して実行→「telnet」て入力でも可。 2: サーバーへの通信を試みる
Microsoft Telnet> (接続先のアドレス) //どこに繋げるか分からないとか、そもそも通信できない場合はここで諦め、cronを使わない別の方法を考えた方が無難 FreeBSD/i386 (www.------.ne.jp) (ttyp0) login: (サーバーへのログインID) Password: (サーバーへのログインPW) Last login: Mon Sep 12 00:56:52 from 182-164-193-113f Copyright (c) 1992-2008 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 6.3-RELEASE (------) #0: Mon Mar 24 18:31:44 JST 2008 Welcome to ------! ID # //PHPまでの絶対パスを調べる PHP5を利用するならwhich php5 ID # which php /usr/local/bin/php //test.phpを設置する場所の絶対パスを調べる ID # pwd /usr/---/---/ID/home 3: なんかcronが使えるような気がしてきたのでtext.phpをcron用に改造
//コマンドラインでPHPを実行するために、さっき調べたものを追加する #!/usr/local/bin/php <?php //MySQL接続用ファイルを絶対パスで指定して読み込む include("/usr/---/---/ID/home/database_login.pl"); //特に変更無し $sql = "DELETE FROM `test` WHERE `name` = 'risouken'"; $result = mysql_query($sql,$link) or die(mysql_error()); ?> 4: 改造したtest.phpをFTPで/usr/---/---/ID/home/にアップする
このとき、転送方法は他のPHPファイルと同じ設定でOK。理総研では「バイナリ転送モード」「漢字コード変換無し」。 アクセス権(パーミッション)は705とか707にしておく。 5: crontab -eで自動実行を設定する
ID # crontab -e ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ /tmp/crontab.------: unmodified: line 1 30 4 25 * * /usr/local/bin/php /usr/---/---/ID/home/test.php //毎月25日のAM04:30に定時自動実行 6: cronが設定されているかどうか調べておく
ID # crontab -l 30 4 25 * * /usr/local/bin/php /usr/---/---/ID/home/test.php //先程設定したものが表示されていればOK。 7: コマンドプロンプトから抜ける
ID # exit logout ホストとの接続が切断されました。 続行するには何かキーを押してください... Microsoft Telnet> quit C:\> exit |