Falha ao iniciar <myapp> .service: Unidade <myapp> .service não encontrada

13

Eu criei um script init.d super básico para o meu bot python:

#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    echo "starting torbot"
    python /home/ctote/dev/slackbots/torbot/torbot.py
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here
    # example: killproc program_name
}

case "$1" in
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

E ter definido torbot.pypara ser +xe #!/usr/local/bin/pythonno topo. Quando tento realmente iniciá-lo, recebo:

:/var/lock/subsys$ sudo service torbot start Failed to start torbot.service: Unit torbot.service not found.

Estou esquecendo de algo?

ctote
fonte

Respostas:

4

Se você estiver usando o ubuntu 16.04 ou mais recente, revise o documento do systemd sobre a criação de arquivos de serviço

O script é para o antigo sistema init e é gerenciado por uma camada de compatibilidade herdada.

teísta
fonte
2

Para mim, estou usando o Ubuntu 16.04.

Primeiro mude a função init

. /etc/init.d/functions

para

. /lib/lsb/init-functions

Em seguida, no shell, crie links simbólicos de / etc / rc * para o meu script:

sudo update-rc.d <myapp> defaults 95
Leon Wolf
fonte
O que significa 95 aqui?
Gherman
@Gherman it's priority
turson
1

Ok, eu tentei algumas etapas nesta resposta stackoverflow ( executando o script iniciante no 17.04? ) E elas funcionaram Meu ambiente é o seguinte

  1. Ubuntu em 17.10
  2. Eu tenho um aplicativo python no servidor Gunicorn 19.x, preciso iniciar esse aplicativo como um serviço.

Primeiramente, você precisa escrever um arquivo foo.service.

[Unit] 
Description=FooServer 

[Service] 
Restart=on-failure
WorkingDirectory=/path/to/your/working/directory/where the foo lives
ExecStart=/what/process/will call foo eg: in my case I used gunicorn app:app
ExecReload=/bin/kill -HUP $MAINPID 
KillSignal=SIGINT 

[Install] 
WantedBy=multi-user.target

O significado de cada palavra no lado esquerdo do sinal '=' e seu equivalente no início (para o anterior) está no link https://wiki.ubuntu.com/SystemdForUpstartUsers

Quando o arquivo estiver pronto, digamos que você o nomeie como 'foo.service' (a extensão .service é importante)

Você precisa colocar o arquivo em /lib/systemd/system

Após o qual você precisa ativar o serviço chamando

systemctl enable foo

O que solicitará que você digite sua senha root, pois criará links simbólicos.

Se você chegou até aqui sem problemas, você é bom. Portanto, seu serviço é criado. Comece chamando

sudo service foo start

systemctl status foopara ver o status sudo service foo stoppara parar o serviço

siddharthrc
fonte
0

Você já cansou algo assim? Como depuro scripts Upstart?

Você pode fornecer a saída que este guia fornece para que possamos ajudá-lo a depurar seu problema?

O Clérigo
fonte
0

Eu tive o mesmo problema, esta é a solução que funcionou para mim. Experimentar:

sudo systemctl daemon-reload

sudo systemctl enable daemon_app.service

sudo systemctl start daemon_app.service

Erol Kalkan
fonte