web-dev-qa-db-ja.com

pleskコントロールパネルでタスクをスケジュールする

Plesk WebホスティングコントロールパネルのPHPでコーディングされたWebソケットスクリプトを実行する方法。 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)でのサービスのセットアップについてはあまり知識がありませんでした。そのため、cronジョブスケジューラのセットアップに取りかかりました。しかし、エラーのために結果は得られませんでした。

タスクスケジューラで実行するために、次の3つのコマンドを追加しました。

  1. @reboot root Nohup php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php > 2>&1 >/dev/null &

    タスク@reboot root Nohup php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/websocket_server.php 2>&1 >/dev/null &は0秒で正常に完了しました。出力:

    -: @reboot: command not found
    
  2. httpdocs/proj_ci/application/libraries/server/websocket_launch.sh > with arguments cron:run

    タスクhttpdocs/proj_ci/application/libraries/server/websocket_launch.shは0秒で正常に完了しました。出力:

    PID=`ps -aef | grep "websocket_server.php" | grep -v grep | awk '{print $2}'`
    if [ -z $PID ]
    then
    ####\#echo "Launching now" Nohup php websocket_server.php > error_log & else # echo "Running as PID $PID" fi
    
  3. /usr/bin/php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php

    タスク/usr/bin/php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.phpはエラーなしで0秒で完了しました。出力:

    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#

Cronジョブを追加する以外に、これを行うより良い方法はありますか?可能な限りソリューションで私を助けてください。 PuTTYターミナルからコマンドを実行できたので、すべて正常に動作します。

1
Nishanth ॐ
<?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()メソッドが失敗した場合、ポート8080で既に開始されている場合、Shell_exec()は影響を与えずに機能します

1
Nishanth ॐ