Мне нужно запустить 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). Так что я пошел с настройкой планировщика заданий. Но это не дало никаких результатов из-за ошибок.
Я добавил три команды для запуска в планировщике задач:
@reboot root nohup php
/var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php
2>&1> / dev / null &Task "@reboot root nohup php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/websocket_server.php 2>&1 >/dev/null &" successfully completed in 0 seconds, output: -: @reboot: command not found
httpdocs / proj_ci / приложения / библиотеки / сервер / websocket_launch.sh
с аргументами cron: runTask "httpdocs/proj_ci/application/libraries/server/websocket_launch.sh" successfully completed in 0 seconds, output: PID=
ps -aef | grep "websocket_server.php" | grep -v grep | awk '{print $2}'
if [-z $ PID] затем #echo "Запуск сейчас" nohup php websocket_server.php> error_log & else # echo "Запуск от имени PID $ PID"
[/ NOEDIT]
/ USR / бен / PHP
/var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php
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,
Я мог бы запустить команду, и все работает отлично
<?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
Других решений пока нет ...