php - 如何在 Plesk 服务器中启动 HTTP 服务器时自动运行 WebSocket(socketo.me) 服务器

标签 php linux cron plesk plesk-onyx

我需要运行以 PHP 24/7/365 脚本编写的 PHP WebSocket

名为 websocket_server.php 的脚本的路径位于以下路径

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

为了首先运行上述脚本,它需要注册为服务并自动调用此命令。 我对在 Linux (Ubuntu 16.04) 中设置服务了解不多。所以我已经开始设置 crown 作业调度程序。但由于错误,它没有产生任何结果。

为了在任务调度程序中运行,我添加了三个命令,它们如下:

  1. @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
    

  2. httpdocs/proj_ci/application/libraries/server/websocket_launch.sh with arguments cron:run

    
      Task "httpdocs/proj_ci/application/libraries/server/websocket_launch.sh" successfully completed in 0 seconds, output:
      PID=<code>ps -aef | grep "websocket_server.php" | grep -v grep | awk '{print $2}'</code>
      if [ -z $PID ]
      then<p></p>
      
      #echo "Launching now" nohup php websocket_server.php > error_log & else # echo "Running as PID $PID" fi
    

  1. /usr/bin/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#

除了增加 crown jobs 之外还有什么更好的方法吗? 请尽可能帮助我解决问题。由于来自 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 中启动

关于php - 如何在 Plesk 服务器中启动 HTTP 服务器时自动运行 WebSocket(socketo.me) 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53002238/

相关文章:

php - 在单个提交按钮事件上一次进行 8 个以上的 ajax 调用是一个好习惯吗?

php - 为什么 while 循环运行一次?

c - IRC 程序不打印最后一条消息

java - 将 .so 文件转换为 .jnilib 文件

spring - 使用 Spring Scheduler 重新安排任务

php问题eval/html/php

php - 如何在 php 中刷新数据并断开用户连接但保持脚本事件

c - switch_root 和 run_init 有什么区别?

ruby-on-rails - 来自 Crontab 的 Rake 任务?

linux - cron.daily 中的 anacron 脚本未通过符号链接(symbolic link)运行