Laravel 5.1: запуск пользовательской команды Artisan в фоновом режиме

Я работаю над приложением чата с использованием пакета Ratchet. С помощью руководств я написал специальную команду artisan для запуска сервера Websocket. Мне нужно запустить эту Artisan-команду в фоновом режиме, и она должна работать все время. Как мне это сделать?

Я пробовал использовать Artisan :: queue и Artisan :: call от Artisan Facade. Но поскольку моя пользовательская команда работает бесконечно (долгое время), она не работает.

Изменить:

Мой хостинг-провайдер не позволяет мне запускать Artisan-команды через ssh.

Вот код для Custom Artisan Command:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use Ratchet\Http\HttpServer;
use Ratchet\Server\IoServer;
use Ratchet\WebSocket\WsServer;
use App\Classes\Socket\ChatSocket;
use App\Classes\Socket\Base\BaseSocket;

class ChatServer extends Command
{
/**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = 'chat_server:serve';

/**
 * The console command description.
 *
 * @var string
 */
protected $description = 'Command description';

/**
 * Create a new command instance.
 *
 * @return void
 */
public function __construct()
{
    parent::__construct();
}

/**
 * Execute the console command.
 *
 * @return mixed
 */
public function handle()
{
    $this->info("Start server");

    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new ChatSocket()
            )
        ),
        8080
    );

    $server->run();
}
}

person Raghav    schedule 02.01.2016    source источник


Ответы (1)


Вам просто нужно запустить его в консоли с помощью команды:

php artisan chat_server:serve

И, вероятно, вам следует убедиться, что он будет работать все время. Один из способов - использовать Supervisor, чтобы эта команда работала (почти) постоянно.

person Marcin Nabiałek    schedule 02.01.2016
comment
Я должен был упомянуть, что у меня нет доступа к командам Artisan через ssh в моей учетной записи общего хостинга. - person Raghav; 02.01.2016
comment
Я пробовал использовать это решение: stackoverflow .com / questions / 32216857 /. Но я не мог заставить его работать. - person Raghav; 02.01.2016
comment
Боюсь, это нелегко. Теоретически вы можете в crone (при условии, что у вас есть cron) работать, например, за 1 минуту $server->run(); и $server->stop();, но это будет не очень надежно, поэтому вам следует подумать о переходе на хостинг VPS, где вы можете запускать команды в cron и убедиться, что они работают все время - person Marcin Nabiałek; 02.01.2016
comment
Спасибо. Я подумываю использовать AWS с бесплатным тарифным планом на 1 год. - person Raghav; 04.01.2016