PHPプログラムを1秒間隔で実行する方法を教えて下さい。

訪問者にブラウザ上で動かしてもらうのではなく
サーバー(Linux CentOS)の裏で実行し続けるカタチで実現したいです。

おそらく何かスクリプト的なモノを書いて
windowsでいう「スタートアップ」的なところに登録するんだと思いますが
やり方が全く分かりません。

ご存じの方はどなたか教えて頂ければ幸いです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/06/03 11:35:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:makotoworld No.1

回答回数10ベストアンサー獲得回数0

ポイント23pt

”cron” というジョブ(スクリプト)を自動実行するためのデーモンプロセスを使います。

ちょっと設定する部分がいくつかあり敷居が高いように感じますが、試してみてください。

CRON設定

cron の設定ガイド

人力検索にもいくつか挙がっています。

Linuxのcronについての質問です。 PHPファイルを、cronで実行設定したところ正しく動作しませんでした。 解決策・原因などをご教示ください。 ※Linuxについての知識はあま.. - 人力検索はてな

まだ終了されていないものですが、ウォッチリストに入れて開くのを待つといいでしょう。

サーバのcronでPHPファイルにアクセスする方法で質問です。 crontabを以下のように設定しました。 0 0 * * * /usr/bin/php /home/test/public_html/update.php しかし、実.. - 人力検索はてな

id:mmss552

1分間隔のCRONを60個作って

1秒単位に見せかけるという手段もありますが、何かちょっとヤバイ気がします。

2008/05/27 19:40:46
id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント23pt

私も Cron が思い浮かびましたがCron の実行は分単位なので、今回はスクリプトでループで回してはどうでしょうか。


たとえば test.sh のような形で作成し

#!/bin/sh
while [ 1 = 1]
do
    php のプログラム処理
    sleep 1
done

これを cron で実行、あるいは

./test.sh&

のような形で実行すれば、お望みの形にならないでしょうか。

http://cyberam.dip.jp/linux_command/shellscript/shellscript_main...


場合によっては、エラー対策や二重起動の対策をする必要があるかもしれません。

id:mmss552

ありがとうございます。

スクリプト的なものは書けそうです。

サーバーが起動したときに、自動的に動かすにはどうしたらいいんでしょうか?

2008/05/27 19:33:49
id:tezcello No.3

回答回数460ベストアンサー獲得回数69

ポイント22pt

PHPスクリプトの種類に依ると思います。

毎秒スクリプトの実行結果をブラウザに表示したいのなら metaタグでrefreshを指示するなりJavascript(どう記述するのかは分かりませんが...)で毎秒再読込みをするという方法はどうでしょう。

サーバやトラフィックに負荷を掛ける事になるので、必要性などを再考されてからの方が良いと思います。

http://www.tohoho-web.com/html/meta.htm


ブラウザ(表示)に関係なく実行するのなら、cron よりもPHPスクリプト内で sleep() をはさんだ無限ループにしておくのが現実的でしょう。

自動実行したいのであれば、起動スクリプトを書いて、chkconfig で自動実行をセットすると良いと思います。

起動スクリプトは、/etc/init.d/ にいろいろとあると思うのでそれらが参考になります。

http://www.searchman.info/tips/1640.html

http://www.geocities.co.jp/SiliconValley-Cupertino/9120/startup....

id:mmss552

http://www.searchman.info/tips/1630.html

このページを見てました。

aaa.sh というスクリプトを動かしたかったら、xxx の部分を aaa.shに変えるだけでOKですよね?

これならなんとかできそうです。

2008/05/27 19:38:07
id:pahoo No.4

回答回数5960ベストアンサー獲得回数633

ポイント22pt

通常のcronの呼び出しサイクルは最小1分間隔ですし、1秒という短いサイクルなのでオーバーヘッドがかかります。デーモンにして常駐した方がいいでしょう。

Linuxのプロセス管理に関する知識は必須で、下記サイトを参考にしてください。

id:mmss552

申し訳ないんですがこのソースコードはどのように活用すればいいんでしょうか?

2008/05/27 19:32:36
  • id:iww
    cronでは1秒おきは無理だったと思います。また多重起動防止策とかも盛り込む必要があり面倒な気がします。


    正確に毎分60回起動とかならともかく、とりあえずでいいなら
    while :; do sleep 1; php hoge; done
    というスクリプトでも書いてバックグラウンドで回すのが一番楽だと思います。
  • id:Mook
    私の回答はiww さんのコメントの内容とほぼ同様なので開封不要です。
  • id:pahoo
    #4のコメントです。
    pcntl_signal 関数の使い方が肝なんですが、Linuxのシグナルハンドラと割り込みの概念を理解できていないと使いこなせません。ただ、#2の方が回答していた無限ループは、実装として no good ですし、1秒おきとなると、シグナルハンドラの使い方を理解して、デーモンと手扱うのが定石ではないかと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません