タイトルが紛らわしく聞こえたら申し訳ありませんが、この説明の後にもっと良いアイデアがあれば、遠慮なく提案してください。
つまり、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_get
、setting_set
フラットファイルまたはデータベースに簡単に置き換えることができる単なる仮想関数です。問題は、それらが頻繁に呼び出されることです。そのため、高速に実行し、メモリをほとんど消費しない (可能であれば、まったくメモリを消費しない) 必要があります。
アイデア?
編集: これまでに保存している設定は、単純なブール値フラグである可能性があることに注意してください。
Edit2 Memcached / APC / Redisに関して。タイプ MEMORY の DB に対して通常の mysql 関数を使用できないのでしょうか? どのくらいのオーバーヘッドがあるのだろうか?つまり、新しいものをインストールするよりも、既に持っているものを使用したいのですが、それは実装に依存します。