J'essaye de faire un service personnalisé dans mon VPS. Cependant, cela ne me permet pas de l'exécuter. Il dit ce qui suit. Je ne sais pas ce qui se passe, mais lorsque je l'exécute sur mon ordinateur portable Ubuntu, cela fonctionne correctement. Quel pourrait être le problème?

sudo systemctl démarrer websocket.service

Failed to issue method call: Unit websocket.service failed to load: No such file or directory. See system logs and 'systemctl status websocket.service' for details.

cat /lib/systemd/system/websocket.service

[Unit]
Description=php webSocket
After=syslog.target network.target

[Service]
User=root

Type=simple
ExecStart=/usr/bin/webs.sh
TimeoutStopSec=20
KillMode=process
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target
Alias=websocket.service

cat /usr/bin/webs.sh

#!/bin/bash
### BEGIN INIT INFO
# Provides:          webSocket
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: php webSocket
# Description:       php webSocket
### END INIT INFO
/usr/bin/php /path/to/server.php

J'ai essayé systemctl daemon-reloadmais j'obtiens ce qui suit

Attempted to remove disk file system, and we can't allow that.
Ignoring /etc/systemd/system/multi-user.target.wants/ssh.service -> /lib/systemd/system/ssh.service for systemd deputy init
Ignoring /etc/systemd/system/multi-user.target.wants/rsyslog.service -> /lib/systemd/system/rsyslog.service for systemd deputy init
Ignoring /etc/systemd/system/multi-user.target.wants/bind9.service -> /lib/systemd/system/bind9.service for systemd deputy init
Ignoring /etc/systemd/system/timers.target.wants/phpsessionclean.timer -> /lib/systemd/system/phpsessionclean.timer for systemd deputy init

Quelqu'un peut-il me donner une idée de ce qui se passe?

Voici les autorisations pour le fichier de service :

-rwxr-xr-x 1 root root  264 Feb  6 05:06 websocket.service*

Et ceci pour le fichier bash :

-rwxr-xr-x 1 root root 349 Feb  6 05:02 webs.sh*

J'ai changé le fichier webs.sh en /usr/bin/chemin et mis à jour le fichier comme @TeroKilkanen l'a mentionné, mais j'ai toujours le même problème.

answer

Un problème ici est que vous ajoutez le script au répertoire racine, qui n'est pas l'endroit pour les scripts. /usr/local/binest un meilleur endroit pour des scripts comme celui-ci.

Le deuxième problème est que votre shebang est incorrect. Shebang n'inclut que le chemin d'accès à l'exécutable qui sera utilisé pour exécuter le script, pas d'arguments. C'est ce qui provoque l' No such file or directory.erreur. https://unix.stackexchange.com/questions/63979/shebang-line-with-usr-bin-env-command-argument-fails-on-linux en dit plus sur ce comportement.

Vous pouvez utiliser cette approche à la place :

Pour webs.shutiliser ceci :

#!/bin/bash
### BEGIN INIT INFO
# Provides:          webSocket
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: php webSocket
# Description:       php webSocket
### END INIT INFO
/usr/bin/php /path/to/server.php

N'oubliez pas de donner des autorisations exécutables au fichier.

Je ne serais pas encore inquiet du commentaire de Michael, le reste de la sortie de systemd pourrait être un symptôme de cette mauvaise configuration.