Serviço Systemd: falha ao emitir chamada de método: serviço de unidade falhou

1

Estou tentando criar um serviço personalizado no meu VPS. No entanto, não me deixa executá-lo. Diz o seguinte. Não tenho certeza do que está acontecendo, mas quando eu o executo no meu laptop Ubuntu, ele funciona corretamente. Qual poderia ser o problema?

sudo systemctl start 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

Eu tentei systemctl daemon-reload , mas recebo o seguinte

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

Alguém pode me dar alguma pista do que está acontecendo?

Estas são as permissões para o arquivo de serviço:

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

E isso para o arquivo bash:

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

Eu alterei o arquivo webs.sh para /usr/bin/ path e atualizei o arquivo como @TeroKilkanen mencionado, mas ainda tenho o mesmo problema.

    
por kobbycoder 06.02.2017 / 06:11

1 resposta

0

Um problema aqui é que você está adicionando o script ao diretório raiz, que não é o lugar para os scripts. /usr/local/bin é um lugar melhor para scripts como esse.

A segunda questão é que o seu shebang está incorreto. Shebang inclui apenas o caminho para o executável que será usado para executar o script, e não quaisquer argumentos para ele. Isso é o que causa o erro No such file or directory. . link diz mais sobre esse comportamento.

Você pode usar essa abordagem:

Para webs.sh use isto:

#!/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

Lembre-se de dar permissões executáveis ao arquivo.

Eu não ficaria preocupado com o comentário de Michael ainda, o resto da saída do systemd poderia ser um sintoma dessa configuração errada.

    
por 06.02.2017 / 08:08