0

タイトルが紛らわしく聞こえたら申し訳ありませんが、この説明の後にもっと良いアイデアがあれば、遠慮なく提案してください。

つまり、Linux で PHP を使用して、次の仮想ファイル/コードを使用しています。

ジョブ.php:

if(setting_get('started')!='on'){
  setting_set('started','on');
  echo 'Starting...';
  set_time_limit(0); // ad infinitum (in theory)
  ignore_user_abort(true); // ignore disconnection
  while(setting_get('started')=='on'){
    // do something
    sleep(10);
  }
}else echo 'Already started!';

interface.php:

switch($_REQUEST['action']){
  case 'status':
    echo 'Service is: '.setting_get('on');
    break;
  case 'start':
    header('Location: job.php');
    break;
  case 'stop':
    setting_set('started','off');
    break;
  case 'restart':
    setting_set('started','off');
    header('Location: job.php');
    break;
}
echo '<a href="?action=status">Check Status</a>';
echo '<a href="?action=start">Start</a>';
echo '<a href="?action=stop">Stop</a>';
echo '<a href="?action=restart">Restart</a>';

コードは一目瞭然です。基本的にjob.php、単一のインスタンスのみを実行できる必要があります。ユーザーが から特に停止するまで無期限に実行できますinterface.php。これは、ユーザーとジョブの間を仲介するために存在します。

私の問題はsetting_getsetting_setフラットファイルまたはデータベースに簡単に置き換えることができる単なる仮想関数です。問題は、それらが頻繁に呼び出されることです。そのため、高速に実行し、メモリをほとんど消費しない (可能であれば、まったくメモリを消費しない) 必要があります。

アイデア?

編集: これまでに保存している設定は、単純なブール値フラグである可能性があることに注意してください。

Edit2 Memcached / APC / Redisに関して。タイプ MEMORY の DB に対して通常の mysql 関数を使用できないのでしょうか? どのくらいのオーバーヘッドがあるのだろうか?つまり、新しいものをインストールするよりも、既に持っているものを使用したいのですが、それは実装に依存します。

4

2 に答える 2

2

APCapc_storeapc_fetch はどうですか?

于 2011-03-03T22:56:13.323 に答える
0

set_time_limit(0); // 無限に (理論上)

cronそのような制限なしでジョブを実行できます。

共有メモリ (最速)、memcached、redis (速度の順に指定) を使用します。

于 2011-03-03T22:56:54.027 に答える