FC2ブログ

ネオブ(neobu)

すごくどうでもいい日常を書き綴っています。他、マニアックなパソコン関係の知識や、ゲームの話等、neo(ネオ)が変なことを繰り広げます。

cronでphpを動かす

とあるシステムの自動メール配信機能を動かすために、
悪戦苦闘しました。
タイトル通り、
「cron」で自動メール配信エンジンである「maildelivery.php」を
定期的な時間に実行させることを試みました。
結構苦労したので、メモとして残しておく!


●環境
 ・サーバー:coreserver(Linux系OS)
 ・PHPバージョン:5
 ・PHP実行パス:/usr/local/bin/php
  ⇒サーバーによって違うよ!(/usr/local/bin/php5の場合もある)


●必要なもの
 ・putty.exe:SSH接続用ツール、ネットから拾ってくる!
  ⇒Host Name 入れて「Open」で繋がる。
  ⇒ユーザー名、パスワードを入れて接続完了。
   ※パスワードは入力が見えないから注意が必要。
 ・FFFTP:ファイル転送用(これ安定)
 ・テキストエディタ
  ⇒サクラエディタor秀丸エディタでよい
   ※文字コードが指定できるものであればよい。


1.SSHを使ってPHPの動作を確認
 まず、maildelivery.php自体が動くかテストが必要。
 SSHで接続し、以下のコマンドを実行。

  sampleserver@s166:~> ./usr/local/bin/php ./virtual/[サーバー名]/maildelivery.php

 うまく通って、自身のメールアドレスにメールが届けば成功!
 成功した場合、SSH上では以下のように表示されるはず。

  ------------------------------------
  Set-Cookie: PHPSESSID=[見せられないよ!]; path=/
  Expires: Thu, 19 Nov 1981 08:52:00 GMT
  Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
  Pragma: no-cache
  Content-type: text/html
  ------------------------------------


2.cronの設定
 value-domainのサイトから、cronを設定する。
 coreserverの場合、Shellを動かすことが前提なので、
 Shellを作成する必要がある。
 サーバーによっては、Shellを使用せず、そのままPHPを実行出来たりもします。
 その場合は、手順3は必要ないわけですよ。
 今回は一時間に一回、エンジンを起動させたいので、以下のように記入します。

  0 * * * *

 これでOK。次にShellのパスを指定します。
 しかし、coreserverの場合、

  /vertual/[サーバー名]/

 上記が固定です。
 PHPを実行する場合は、

  /usr/local/bin/php /vertual/[サーバー名]/

 で、直接PHPを実行させることが出来るのですが、
 「/usr/local/bin/php」の部分がないので、
 Shellしか実行出来ないわけですなぁこれが・・・

 ではでは、Shellのパスを入れてやりましょう。

  /vertual/[サーバー名]/cron.sh

 入力が完了したら、下方の「保存」ボタンをしっかり押下しましょう。
 (↑coreserverなので)
 次は、cron.shという名前でShellを作っていきましょう。


3.Shellを作る
 cron.shという名称のファイルを作成し、
 テキストエディタで編集していきましょう。

  ------------------------------------
  #/bin/sh
 
  /usr/local/bin/php /vertual/[サーバー名]/maildelivery.php

  exit
  ------------------------------------

 これでOKです。

 はい、ここで注意事項です。
 文字コードによっては問題が発生するみたいなので、
 一応記載しておきます。

 今回はcoreserver(Linux系)用の「Shift-JIS」で保存しています。
 てか、しましょう。
 「EUC-JP」で作成するとShellが動かないかもしれません。
 逆に、他サーバー(Windows系)の場合、「EUC-JP」で作りましょう。

 あと、改行は「LF」で保存しような!これを忘れてはいけません。


4.PHPソースについて
 maildelivery.phpに先頭一行目に、以下の記載する必要があります。

  #!/usr/local/bin/php

 これで保存すれば、準備完了。


5.FTPによる転送
 作ったcron.shをサーバーへ転送します。
 cron.shを右クリックし、「属性変更」でパーミッションを「755」に設定。

 あぁ、言い忘れていた。
 ファイルを転送する際、「転送モード」に注意するんだぞ!
 ちなみに自分は「アスキーモード」で転送しました。

 maildelivery.phpも転送します。
 こいつのパーミッションも「755」に設定してあります。
 ※あくまで現環境で動作している内容なので、
  環境に合ったパーミッションを設定してくださいね。


6.最後の試練
 あとは、メールが来るのを待つだけですな~。
 おっ、メールキタ。
 coreserverから、cronの成功失敗の通知が来ます。

  /virtual/[サーバー名]/maildelivery.php: line 3: ?php: No such file or directory

 上記のような内容が本文にあった場合は、残念ながら失敗です。
 しかし、cronからShellを、ShellからPHPの呼び出しには成功しています。
 パス等を確認し、再チャレンジ。

  ------------------------------------
  Set-Cookie: PHPSESSID=[見せられないよ!]; path=/
  Expires: Thu, 19 Nov 1981 08:52:00 GMT
  Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
  Pragma: no-cache
  Content-type: text/html
  ------------------------------------

 これが本文にあれば、成功しています。おめっとさん!

  Status: 404 Not Found Content-type: text/html No input file specified

 上記のエラーが本文にある場合、Shellの文字コードが絡んでいる場合と、
 404エラーなので、ファイルが見つかっていない可能性があります。
 なので、PHPのパスを確認しましょう。

 ちなみに、成功失敗の通知うぜーって人のための設定。
 cron設定ページで

  (省略)/cron.sh >/dev/null 2>&1

 と記入することで、何も届かなくなるよ!


7.その他
 coreserverで、cronの設定方法がわかんないよ!人用の記述。
 実はSSHで設定可能だったりする。

  sampleserver@s166:~> crontab -e

 これでなんと、viでcronを直接記入できる!

 iを押すとinsertモードに入り、

  0 * * * * /vertula/[サーバー名]/cron.sh

 てな感じで入力し、Escキーを押し、insertモードを抜けます。
 次に、:wq!と入力し、上書き保存。ね?簡単でしょ?


これで多分動くでしょう。
少しでも困っている人がコレ見て助かれば幸いですわ(^∇^)

--------------------
ランキング参加してるので、クリックしてくれると嬉しいです^^
ブログランキング・にほんブログ村へ
にほんブログ村


テーマ:PHP - ジャンル:コンピュータ

PC関係 | コメント:2 | トラックバック:0 |
<<JavaScriptにインフォメーションメッセージダイアログがない件について | ホーム | Wii Fit やってみた>>

コメント

はじめまして、ジョージ滝川と申します。

coreserverのcronでphpを動かしたくて試行錯誤している中でGoogleからたどり着き、おかげさまで無事phpを動かすことができました。ありがとうございました!

一点、シェルの作成のところの、

/usr/local/bin/php /vertual/[サーバー名]/maildelivery.php

という記載の「vertual」は「virtual」の誤りかと思いますので、ご報告させて頂きます
(一瞬ハマりかけました)。
2014-04-03 Thu 00:32 | URL | ジョージ滝川 [ 編集 ]
コメントありがとうございます!

いや~、スペルミスとはお恥ずかしい・・・////
ご迷惑をおかけ致しました。

> はじめまして、ジョージ滝川と申します。
>
> coreserverのcronでphpを動かしたくて試行錯誤している中でGoogleからたどり着き、おかげさまで無事phpを動かすことができました。ありがとうございました!
>
> 一点、シェルの作成のところの、
>
> /usr/local/bin/php /vertual/[サーバー名]/maildelivery.php
>
> という記載の「vertual」は「virtual」の誤りかと思いますので、ご報告させて頂きます
> (一瞬ハマりかけました)。
2014-07-13 Sun 12:45 | URL | Nasty Neo [ 編集 ]

コメントの投稿















管理者にだけ表示を許可する

トラックバック

| ホーム |