Как автоматически запускать сервер WebSocket(socketo.me) при запуске HTTP-сервера на сервере Plesk

Мне нужно запустить скрипт PHP WebSocket, написанный на PHP 24/7/365

Путь к скрипту с именем websocket_server.php находится по указанному ниже пути.

/var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/websocket_server.php

Чтобы сначала запустить приведенный выше сценарий, ему необходимо зарегистрироваться в качестве службы и автоматически вызвать эту команду. У меня не было особых знаний о настройке службы в Linux (Ubuntu 16.04). Итак, я занялся настройкой планировщика заданий Crown. Но это не дало никаких результатов из-за ошибок.

Я добавил три команды для запуска в планировщике задач, они следующие:

  1. #P5#
  2. #P6# #echo "Запуск сейчас" nohup php websocket_server.php > error_log & else # echo "Запуск от имени PID $PID" fi

  1. #P8#


Task "/usr/bin/php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php" completed with error in 0 seconds, output:
Could not open input file: /usr/bin/php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php

Это из терминала PuTTY

root@h3069528:/var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries# php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php
PHP Warning:  require_once(../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php on line 10
PHP Fatal error:  require_once(): Failed opening required '../vendor/autoload.php' (include_path='.:/usr/share/php') in /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php on line 10
root@h3069528:/var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries# cd /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server
root@h3069528:/var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server# php websocket_server.php                                             ^C
root@h3069528:/var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server#
root@h3069528:/var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server#

Помимо добавления коронных заданий, есть ли другие способы сделать это лучше? Пожалуйста, помогите мне с решением, насколько это возможно. Так как с терминала PuTTY я смог запустить команду, и все работает нормально


person Nɪsʜᴀɴᴛʜ ॐ    schedule 26.10.2018    source источник


Ответы (1)


<?php 
# The maximum execution time, in seconds. If set to zero, no time limit is imposed.
set_time_limit(0);

# Make sure to keep alive the script when a client disconnect.
ignore_user_abort(true);

error_reporting(E_ALL);
ini_set('display_errors', 'On');
error_reporting(-1); // reports all errors
ini_set("display_errors", "1"); // shows all errors
ini_set("log_errors", 1);
ini_set("error_log", "/var/www/vhosts/abc.xy/httpdocs/websocket.log");

echo "Script start at: " . date('h:i:s') . "\n"; 
exec('bash -c "exec nohup php websocket_server.php >> /var/www/vhosts/abc.xy/httpdocs/websocket.log 2>&1 &"');
shell_exec('nohup php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php 2>&1 >> /var/www/vhosts/abc.xy/httpdocs/websocket.log &');
echo "Script end at: " . date('h:i:s'); 
?>

Это сохранит все журналы по указанному пути с учетом /var/www/vhosts/abc.xy/httpdocs/websocket.log

Приведенный выше сценарий отлично работает, если вы обращаетесь к указанному сценарию по имени из браузера. В случае, если сервер перезапустится, вы сможете запланировать это в задании Cron.

В случае сбоя метода exec() на каком-то хостинг-сервере shell_exec() будет работать без последствий, если он уже запущен на порту 8080

person Nɪsʜᴀɴᴛʜ ॐ    schedule 27.10.2018