中学受験専門 理科総合研究所 −理総研−

フロントページへ
Name:
Pass:
RSS
: ユーザー登録はコチラ :
左 理総研:技術情報と開発メモ 右

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接続用ファイルを同一ディレクトリから読み込む
include("database_login.pl");
//条件に合致したデータを削除
$sql = "DELETE FROM `test` WHERE `name` = 'risouken'";
$result = mysql_query($sql,$link) or die(mysql_error());
?>
理総研は、とってもクールなホスティング会社「NeXt Web(ネクストウェブ)」のレンタルサーバー上で稼働しています。 勝手に宣伝しておきますけど、ネクストウェブはあまりにクールすぎて使いこなすには借りる人のスキルが結構試されます。ですが逆に言えば、その手の人にとっては(管理人も含めて)サポート・安定性、何をとっても満足度の高いホスティング会社とも言えます。
さて、あまりにクールなネクストウェブではそのFAQにcronの利用について一切何も書かれていません。使って良いのかどうかも分からないのでとりあえずTelnet接続してみたら、繋がった上にcron設定もできたので、この一連の流れは他サーバーの方にも有効な情報になるのではないかと思いまして。
右上のようなコードを記述した「test.php」を例に書いていきます。test.phpはそれ単体でサーバにアップすれば動くもので、その際に外部ファイルをincludeしています。特別なツールがない場合、cronの設定はtest.phpを適切に設置することよりも先にサーバーとあなたがTelnetで通信できる状態にあるか知っておかないといけません。
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で自動実行を設定する
:必要最低限のvi操作説明
viは1行毎に入力していくエディタで、書くときは「編集モード」,移動や削除などの処理は「コマンドモード」と操作が分離した、メモ帳やWord等とは根本的に異なるものです。
編集モード
ESCでコマンドモードへ

コマンドモード
とか押して、編集モードへ
キーボードで入力! ・・・カーソル左へ
・・・カーソル右へ
・・・やり直し
・・・文字削除
:q!・・・保存しないで終了
:wq・・・保存して終了
ID # crontab -e
 で、コマンドラインエディタである vi が起動して次のようになる。
~
~
~
~
~
~
~
~
~
~
~
/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


ホストとの接続が切断されました。

続行するには何かキーを押してください...
 何でもいーからキーを押そう。ただしまだTelnetから抜けていないので、
Microsoft Telnet> quit
 あとはプロンプトを閉じる
C:\> exit
著者 You Mizuguchi
© 2011 System-iDO IT Devisers