私のパソコン雑記帖

XREA サーバでの cron 利用例

カテゴリー: PC一般
25Sep2008

基本

cron は UNIX(Linux) 系の OS で定期的にコマンドを実行する仕組み。cron を使うと、その時点でPCを操作する必要なしに、あらかじめコマンドを予約しておくことが出来ます。

日時を指定してファイルをアップロードする。
日時を指定してファイルを削除する。
日時を指定してメールを発送する。
等々。

xrea では cron が標準装備されています。以下実際に使ってみた際のメモ。


設定の仕方

  1. サーバーの管理メニューから「CRON ジョブ」をクリックします。設定画面の下に解説があり、いきなり「CRONTAB の設定方法、シェルスクリプトの記述方法につきましては、サポート対象外とさせて頂いております。」と平手打ちをくわされたような感じですが、実際は解説通りにやればよく、一発で成功しました。

  2. 一寸紛らわしいと思ったのは、「CRON ジョブの例」 の表示。 [0 * * * * cron1.sh] のように書かれていていますが、[0 * * * * ] の部分は、上の 「CRON ジョブの編集」 で行なうわけだから気にしなくても構わない。この点以外に迷うところはありませんでした。

  3. 「シェルスクリプトの例」に従えば、シェルスクリプトを知らなくても、これをそのまま使うことができます。私の場合 php で実行ファイルを作ったので、cron1.sh の中身を

    #!/bin/sh
    #PHP
    /usr/local/bin/php /virtual/[user name]/[path]/cron_exe.php
    exit

    とするだけ。なお cron_exe.php は単独で機能確認しておいた方が間違いありません。

    cron_exe.php の例(ファイルのアップデート)。

    $file1="[path]/index.php"; //元ファイル
    $file2="[path]/index_new.php"; //新ファイル
    $fp=fopen($file2, "r");
    if(!$fp){print "error2"; exit;}
    $content=fread($fp,filesize($file2));
    fclose( $fp );
    $flock=fopen("[path]/proxy.txt","w");
    flock($flock,LOCK_EX);
    $fp=fopen($file1,"w");
    if(!$fp){print "error1"; exit;}
    fwrite($fp,$content);
    fclose($fp);
    fclose( $flock);

  4. 以上のように実行ファイル cron_exe.php に依存するのであれば、シェルスクリプトはワンパターンですが、勿論シェルスクリプトの実行コマンドを使うことも可能。ファイルのアップロード、削除、メール発信程度であれば、簡単に覚えられます。cronによる日時指定のWeb更新、メール送信にサンプルコードがあるので参考になります。

    cron1.sh (ファイルアップロード)の例

    #!/bin/sh
    cp /virtual/[user name]/public_html/[path]/index_new.php
    /virtual/[user name]/public_html/[path]/index.php
    exit

    これは、index.php を index_new.php で置き換えるものです。2行目と3行目は改行で表示していますが、実際は改行せず、半角スペースをおいて続けます。

改行コード・他

  1. 改行コードは「LF」。TeraPad を使用すると「文字/改行コード指定保存」が使えるので便利。文字コードは「EUC」。
  2. アップロードは「アスキー転送モード」。
  3. アクセス権限の設定。上にあげたコード例では index_new.php [644] index.php [666] 上位フォールダ [707]。index.php が存在しない時は自動的に生成されます。しかし実際は、index.php [644] でも問題ない。これは xrea/coreserver が持っている special bonus とでも言うべきか。
  4. シェルスクリプトの実行時にエラーがあった場合、エラーメッセージはxreaに登録してあるメールアドレスに転送されます。


コメント