Laravel/Lumen を使用しています。SMS を送信する簡単なジョブをセットアップしました。
<?php
namespace App\Jobs;
class SendDepositSMSAlertJob extends Job
{
private $numbers;
private $account;
private $type;
private $amount;
private $date;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($account, $type, $amount, $date, $numbers)
{
$this->numbers = $numbers;
$this->account = $account;
$this->type = $type;
$this->amount = $amount;
$this->date = $date;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
foreach ($this->numbers as $number) {
// Settings
$url = "https://api.xxxxx.com/v3/messages/send";
$from = "XX";
$message = urlencode($this->account." has been credited with a " . $this->type . " deposit of GHs " . $this->amount . " on " . $this->date);
$client_id = "xxxxxx";
$client_secret = "xxxxxxx";
$query_string = "?From=".$from."&To=".$number."&Content=".$message."&ClientId=".$client_id."&ClientSecret=".$client_secret."&RegisteredDelivery=true";
$response = @file_get_contents($url.$query_string);
}
}
}
コントローラーにレコードが保存されるたびに、ジョブをディスパッチします。
$this->dispatch(new SendDepositSMSAlertJob($bank . ' - ' . $acNumber, $depositType, $depositAmount, $reportDate, $telNumbers));
これで、kernel.php に次の設定ができました。
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
\JK\Dingo\Api\Console\Commands\RouteListCommand::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// Run once a minute
$schedule->command('queue:work')->everyMinute()->withoutOverlapping();
}
}
私の cPanel には、次の cron ジョブが設定されています。
php -d register_argc_argv=On /home/xxxxxx/xxxxxx/artisan schedule:run
上記のコマンドは、毎分実行するように設定されています。
問題 この設定がうまくいきません。Bluehost VPS では、サーバーが何度もクラッシュし、再起動を余儀なくされました。どうやらメモリを大量に消費していたようで、その理由がわかりません。サポートも役に立ちませんでした。はっきりさせておきますが、うまくいきましたが、サーバーが少なくとも 1 日に 2 回クラッシュしました。
それで、それが私のホスティングと関係があると思って、別の場所(SiteGround)で別のホスティングを購入しました。現在、cronを機能させることさえできません。cron が実行されるたびに、これが私のメールに送信されます。
Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Resource temporarily unavailable' in /home/xxxxx/xxxxx/vendor/symfony/console/Application.php:941
Stack trace:
#0 [internal function]: Laravel\Lumen\Application->Laravel\Lumen\Concerns\{closure}(2, 'proc_open(): fo...', '/home/abc17060/...', 941, Array)
#1 /home/xxxxx/xxxxx/vendor/symfony/console/Application.php(941): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 /home/xxxxx/xxxxx/vendor/symfony/console/Application.php(729): Symfony\Component\Console\Application->getSttyColumns()
#3 /home/xxxxx/xxxxx/vendor/symfony/console/Application.php(690): Symfony\Component\Console\Application->getTerminalDimensions()
#4 /home/xxxxx/xxxxx/vendor/symfony/console/Application.php(623): Symfony\Component\Console\Application->getTerminalWidth()
#5 /home/xxxxx/xxxxx/vendor/laravel/lumen-framework/src/Exceptions/Handler.php(147): Symfony\Component\Console\Application->renderException(Object(ErrorException), in /home/xxxxx/xxxxx/vendor/symfony/console/Application.php on line 941
Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Resource temporarily unavailable' in /home/xxxxx/xxxxx/vendor/symfony/console/Application.php:941
Stack trace:
#0 [internal function]: Laravel\Lumen\Application->Laravel\Lumen\Concerns\{closure}(2, 'proc_open(): fo...', '/home/abc17060/...', 941, Array)
#1 /home/xxxxx/xxxxx/vendor/symfony/console/Application.php(941): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 /home/xxxxx/xxxxx/vendor/symfony/console/Application.php(729): Symfony\Component\Console\Application->getSttyColumns()
#3 /home/xxxxx/xxxxx/vendor/symfony/console/Application.php(690): Symfony\Component\Console\Application->getTerminalDimensions()
#4 /home/xxxxx/xxxxx/vendor/symfony/console/Application.php(623): Symfony\Component\Console\Application->getTerminalWidth()
#5 /home/xxxxx/xxxxx/vendor/laravel/lumen-framework/src/Exceptions/Handler.php(147): Symfony\Component\Console\Application->renderException(Object(Symfony\Component in /home/xxxxx/xxxxx/vendor/symfony/console/Application.php on line 941
今、私はこれを引き起こしているのか、それを修正する方法がわかりません。ドキュメントのすべての指示に従っていると思いますが、ここで何が間違っているのかわかりません。私は調査を行い、両方のホスティング会社のサポートに連絡しましたが、それでも...
これがサポートからの最後のメッセージでした。
cron を数回実行しようとしましたが、実行するスケジュールされたコマンドがありません。
xxxxxx@c27664 [~/xxxxx]# php -d register_argc_argv=On /home/xxxxxx/xxxxxx/artisan schedule:run
No scheduled commands are ready to run.
また、制限をもう一度増やしました。スクリプトの実行に 300 秒を設定し、memory_limit を 2048MB に設定しました。
もう一度お試しください。サポートが必要な場合は、お気軽にチケットを更新してください。
ルーメンとジョブに何か問題がありますか? ここで何が起こっているのか、Laravel 5.1でコマンドを正常に実行しました。
または、cron 経由で通常の PHP を使用してこのスクリプトを実行できる、より簡単で効率的な方法がある場合は、その方法を教えてください。