Como eu crio um serviço que começa na inicialização?

2

Há mais do que algumas perguntas sobre isso, mas encontrei um problema com um método que usei no passado. Em versões mais antigas do Ubuntu, usei este tutorial .

  1. Eu criei um arquivo /etc/init.d/myservice.sh

  2. O arquivo contém o seguinte:

#!/bin/bash SERVICE_NAME=myservice PATH_TO_JAR=/usr/local/MyProject/MyProject.jar PID_PATH_NAME=/var/run/$SERVICE_NAME.pid case $1 in start) echo "Starting $SERVICE_NAME ..." if [ ! -f $PID_PATH_NAME ]; then nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is already running ..." fi ;; stop) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stoping ..." kill $PID; echo "$SERVICE_NAME stopped ..." rm $PID_PATH_NAME else echo "$SERVICE_NAME is not running ..." fi ;; restart) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stopping ..."; kill $PID; echo "$SERVICE_NAME stopped ..."; rm $PID_PATH_NAME echo "$SERVICE_NAME starting ..." nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is not running ..." fi ;; esac

  1. Verifiquei se o arquivo tinha as permissões / proprietário corretas

  2. Eu corro sudo service myservice start e recebo o seguinte erro.

    Falha ao iniciar o myservice.service: Unit myservice.service não encontrado.

Quando pesquisei isso, encontrei muitas informações conflitantes. Eu encontrei respostas stackoverflow dizendo que você não poderia mais usar esse método, e outros dizendo que este método ainda é suportado. Qual é o método correto, assumindo que eu estou usando o Ubuntu 16.04 (e talvez me aponte para um tutorial?), E se este método ainda é válido, alguém pode me apontar na direção de por que ele não estaria funcionando agora? / p>     

por trueCamelType 27.07.2017 / 00:26

1 resposta

0

Consegui encontrar um artigo interessante sobre por que o init precisava ser substituído, e o que foi substituído por. Para citá-lo "Um processo init inicia serialmente, isto é, uma tarefa é iniciada somente depois que a última inicialização da tarefa foi bem-sucedida e carregada na memória. Isso geralmente resultou em tempo de inicialização demorado e longo. Entretanto, o systemd não foi projetado para velocidade, mas para fazer as coisas ordenadamente, o que, por sua vez, evita todo o atraso necessário à ONU. "

Então, para responder minha própria pergunta, parece que o systemd substituiu o init.d por algumas razões válidas, e outros métodos, como o que é mencionado nos comentários do GypsyCosmonaut, é ter apenas um script de inicialização em ~/.config/autostart vem com uma ferramenta de aplicativos de inicialização útil se você estiver usando o desktop.

exemplo do init.d

Para o caso de alguém realmente querer fazer o que eu estava tentando, você só precisa de um link para o diretório /etc/init.d.

Por exemplo, se você tiver um arquivo .jar que precisa ser executado usando comandos semelhantes a /etc/init.d/yourProgram start ou /etc/init.d/yourProgram stop , basta fazer algo semelhante a:

sudo ln -s /path/to/yourProgram.jar /etc/init.d/yourProgram

O método acima também funciona se você apontar para um script que inicia seu programa em vez de um .jar

init.d iniciar na inicialização

Se você quiser que o serviço inicie na inicialização, use:

sudo service yourProgram defaults

Isto irá procurar automaticamente em /etc/init.d/ e encontrar o seu link para o script atual.

    
por 27.07.2017 / 03:32