Comment exécuter des scripts de socket Web codés dans PHP dans le panneau de configuration de l'hébergement Web Plesk. Je dois exécuter le PHP WebSocket scripté dans PHP 24/7/365. Le chemin du script nommé websocket_server.php se trouve dans le chemin: /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/websocket_server.php
Pour pouvoir exécuter le script ci-dessus en premier, il doit être enregistré en tant que service et appeler cette commande automatiquement. Je n'avais pas beaucoup de connaissances sur la configuration du service sous Linux (Ubuntu 16.04). J'avais donc décidé de configurer le planificateur de tâches cron. Mais cela n'a donné aucun résultat à cause d'erreurs.
J'avais ajouté trois commandes afin de les exécuter dans le planificateur de tâches:
@reboot root Nohup php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php > 2>&1 >/dev/null &
La tâche
@reboot root Nohup php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/websocket_server.php 2>&1 >/dev/null &
s'est terminée avec succès en 0 secondes, sortie:-: @reboot: command not found
httpdocs/proj_ci/application/libraries/server/websocket_launch.sh > with arguments cron:run
La tâche
httpdocs/proj_ci/application/libraries/server/websocket_launch.sh
s'est terminée avec succès en 0 secondes, sortie: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
/usr/bin/php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php
La tâche
/usr/bin/php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php
s'est terminée avec une erreur en 0 secondes, sortie:Could not open input file: /usr/bin/php /var/www/vhosts/abc.xy/httpdocs/proj_ci/application/libraries/server/websocket_server.php
Ceci est du terminal 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#
Outre l'ajout de tâches cron, existe-t-il de meilleurs moyens de le faire? Aidez-moi s'il vous plaît avec la solution autant que possible. Depuis le terminal PuTTY, j'ai pu exécuter la commande et tout fonctionne bien.
<?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');
?>
Cela gardera tous les journaux dans un chemin spécifié étant donné /var/www/vhosts/abc.xy/httpdocs/websocket.log
Le script ci-dessus fonctionne correctement si vous accédez au script spécifié par son nom à partir du navigateur. Si le serveur redémarre, vous pourrez le planifier dans le travail Cron.
En cas d'échec de la méthode exec()
sur un serveur d'hébergement, Shell_exec()
fonctionnera sans effet si elle est déjà démarrée sur le port 8080.