Inicie o tomcat na inicialização com privilégios administrativos

23

Preciso executar um processo antes de efetuar o login no sistema. Como executá-lo como serviços? como faço para fazer serviços no Linux?

No Ubuntu e Fedora? O serviço é personalizado tomcat

Sajad Bahmani
fonte
6
Como os serviços iniciam é muito condicional na distribuição Linux. Por favor, diga-nos o que você está tentando realizar (e em que distribuição e talvez o Ambiente de Trabalho), porque, no momento, acho que você provavelmente não está pensando no problema corretamente.
Xenoterracide

Respostas:

23

Para executar um serviço sem ou antes de efetuar login no sistema (por exemplo, "na inicialização"), você precisará criar um script de inicialização e adicioná-lo à sequência de inicialização.
Há três partes em um script de serviço: iniciar, parar e reiniciar.
A estrutura básica de um script de serviço é:

#!/bin/bash
#
RETVAL=0;

start() {
echo “Starting <Service>”
}

stop() {
echo “Stopping <Service>”
}

restart() {
stop
start
}

case “$1″ in
start)
  start
;;
stop)
  stop
;;
restart)
  restart
;;
*)

echo $”Usage: $0 {start|stop|restart}”
exit 1
esac

exit $RETVAL  

Depois de ajustar o script ao seu gosto, basta colocá-lo em /etc/init.d/
E adicioná-lo ao processo de inicialização do serviço do sistema (no Fedora, eu não sou um usuário do Ubuntu,> D):

chkconfig -add <ServiceName>  

O serviço será adicionado ao processo de inicialização do sistema e você não precisará iniciá-lo manualmente novamente.

Felicidades!

wormintrude
fonte
2
Observe que, enquanto iniciar, parar e reiniciar, geralmente são suficientes para scripts init simples. Você provavelmente também deseja incluir uma ação 'status', que é fácil no Debian e em outras distros que incluem status_of_proc () em seu pacote init-functions. Pacotes bem gerenciados incluirão todas as funções exigidas pelo LSB ( refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/… ). O script init distribuído com o tomcat no Ubuntu contém todas essas ações, provavelmente é apostado apenas em usá-lo.
Steven D
19

Dependendo do sistema init, você cria o script init de maneira diferente. O Fedora oferece a você o sistema inicial e o sistema para escolher e, é claro, compatibilidade com SysV.

Upstart

  • criar arquivo de definição de serviço como /etc/init/custom-tomcat.conf
  • ponha dentro:

    start on stopped rc RUNLEVEL=3
    respawn
    exec /path/to/your/tomcat --and --parameters
    

E seu Tomcat deve iniciar na inicialização do sistema.

Systemd

  • criar definição de serviço em /etc/systemd/system/custom-tomcat.service
  • ponha dentro:

    [Service]
    ExecStart=/path/to/your/tomcat --and --parameters
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

e habilite seu serviço usando systemctl enable custom-tomcat.service. Será iniciado a cada inicialização normal.

É claro que existem mais algumas opções de configuração para os dois sistemas init, você pode ver as na documentação deles.

zdzichu
fonte
7

O Tomcat é um serviço bastante comum, eu recomendo que você já veja o script init fornecido pela distribuição. Provavelmente, ele funciona com seu binário personalizado, com pouco ou nenhum ajuste.

xenoterracida
fonte
6

Se você possui um crondaemon, um dos ganchos de tempo cron predefinidos é o @rebootque é executado naturalmente quando o sistema é iniciado. Execute crontab -epara editar seu crontabarquivo e adicione uma linha:

@reboot /your/command/here
Michael Mrozek
fonte
Isso se aplica a todas as startups ou apenas reinicializa?
WhyNotHugo
Aplica-se apenas ao fcron - não ao vixie-cron ou a qualquer outro cron AFAIK.
Maciej Piechotka
@ Maciej Definitivamente funciona para vixie-cron; é isso que eu uso
Michael Mrozek
@Hugo Todas as startups
Michael Mrozek
6

Para simplesmente executar um script depois que o computador foi iniciado, mas antes que um usuário efetue login, você pode simplesmente editar o script /etc/rc.local, destinado a resolver exatamente essa tarefa.

fschmitt
fonte
3

Você pode criar um script mais sofisticado, que permita executar sob as permissões de um usuário específico, da seguinte maneira:

#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"

#Helper functions
start() {
        start-stop-daemon --start --quiet --background --make-pidfile \
                --pidfile /var/run/$NAME.pid --chuid $USERGROUP \
                --exec /usr/local/bin/myservice
}

stop() {
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec myservice --retry 30
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        stop
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        #set +e
        stop
        #set -e
        #sleep 1
        start

        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

O script entra em /etc/init.d/myservice e você inicia o serviço executando:

/etc/init.d/myservice start

Leia a página do manual no start-stop-daemon para entender como ele funciona.

Mr Ed
fonte
1

No Ubuntu ou Debian, como você pode usar, para adicionar

update-rc.d your_service defaults

remover

update-rc.d -f your_service remove

Tchau! \ o

é bom implementar o status das funções e o force-reload para serem compiladores de LSB

MaikoID
fonte
como fazer meu daemon aparecer na service --status-alllista?
Necktwi