私はCronによって起動された私のSymfonyアプリケーションにコマンドを持っています。サーバー上で同時に実行されるインスタンスの数を制限できるようにしたいとしましょう。私はこれを行う方法の手がかりを持っていません。コマンドを一度だけ起動して終了するまでロックする方法を見つけましたが、複数のインスタンスを起動してインスタンスの数を制限する方法はわかりません。 アイデアはありますか?Symfonyコマンドのインスタンス数を制限する
1
A
答えて
0
スーパーコンピュータとしてプロセス制御システムを使用することをお勧めします。使用するのは非常に簡単で、開始するスクリプトのインスタンス数を選択できます。
0
あなたは、コマンドが実行を開始し、それが終了しています前にそれを減少すると増加しますカウンタを保持している共有カウンタファイルを使用することができます。あなたのクーロンまたはスーパーバイザで実行される「ランチャーコマンド」を作成することができます
$processCount = exec('ps aux | grep "some part of the console command you run" | grep -v "grep" | wc -l');
if(!empty($processCount) && $processCount >= X) {
return false;
}
0
:
別の解決策は、このようなもので、プロセスのリストをチェックすることになります。
このsymfonyのcommadは、サーバ上でprocess componentを使用してインスタンスを起動できます。チェックしたいものをチェックして、exec
PHP関数のようにしたいことをすべて実行することもできます。
0
あなたが探しているのはsemaphore
です。
現在、3.4に予定されているLockComponent
があります(3.3から引き出されました)。これはFilesystemComponent
のLockHandler
より大きな改善点です。
ピンチでは、おそらくLockHandler
から固定数のロックをプールできます。ファイルシステムでflock
を使用しているので、私はそれをお勧めしません。これにより、ロックが単一のサーバーに制限されます。さらに、flock
は、一部のシステムではプロセスの範囲に限定される場合があります。
<?php
use Symfony\Component\Filesystem\LockHandler;
define('LOCK_ID', 'some-identifier');
define('LOCK_MAX', 5);
$lockPool = [];
for ($i = 0; $i <= LOCK_MAX;) {
$lockHandle = sprintf('%s-%s.lock', LOCK_ID, ++$i);
$lockPool[$i] = new LockHandler($lockHandle);
}
$activeLock = null;
$lockTimeout = 60 * 1000;
$lockWaitStart = microtime(true);
while(!$activeLock) {
foreach ($lockPool as $lockHandler) {
if ($lockHandler->lock()) {
$activeLock = $lockHandler;
break 2;
}
}
if ($lockTimeout && ($lockTimeout > microtime(true) - $lockWaitStart)) {
break;
}
// Randomly wait between 0.1ms and 10ms
usleep(mt_rand(100, 10000));
}
ははるかに良いと効率的なソリューションは、セマフォ拡張子を使用してftok
、shm_*
とsem_*
でいくつかの魔法を動作するようになります。
関連する問題
- 1. Appengine - インスタンスの数を制限する
- 2. Symfonyのホスト制限
- 3. Django - すべてのユーザのモデルのインスタンス数を制限する
- 4. スケールアウト時の晴天のwebjobのインスタンス数を制限する
- 5. App Engineインスタンスごとのタスクリクエストの数を制限する
- 6. ProcessBuilderのコマンドの制限?
- 7. タイプクラスまたはインスタンスの派生変数を制限する
- 8. gitクライアントでgitコマンドを制限する
- 9. Symfonyの経路長の制限
- 10. symfony CRUDアクションへのアクセス制限
- 11. バージョンによるPowershellコマンドの制限
- 12. C#でプロセスのインスタンスを1に制限
- 13. Symfony - 特定のドメインからの登録を制限する
- 14. ページ内にTHREE.WebGLRendererインスタンスの数に制限はありますか?
- 15. インスタンスにアクセスする要求の数を制限する方法は?
- 16. Node.js複数のレート制限を使用するAPIレート制限
- 17. クリック数の制限、制限、無効化
- 18. 個々のPowerShellコマンドの制限
- 19. xargsコマンドの長さの制限
- 20. AWSインスタンスの制限と監視API
- 21. 電子app.makeSingleInstanceは、無制限のインスタンスに
- 22. App Engine Flexインスタンスのコア数の制限/削減
- 23. ADF内の1つのビュー・インスタンスの変更を制限する
- 24. BigQueryのグループ制限を制限する
- 25. 特定のVPC内のインスタンスにユーザーを制限するIAMポリシー
- 26. インスタンスメソッドのパラメータをインスタンスの型に制限する
- 27. PHPのキーワードの数を制限する
- 28. クラスのダイレクトインスタンスの数を制限する
- 29. matlabのmkdirコマンドでディレクトリ権限を制御する方法は?
- 30. bashで特定のコマンドを制限する方法は?