Como executar um script automaticamente na inicialização do sistema em centos

8

Instalei com sucesso o TeamCity ib CentOS 6.2 Minimal. Estou preso em tentar executar um script automaticamente na inicialização do sistema:

/opt/TeamCity/bin/teamcity-server.sh start

Pesquisei no Google e tentei vários métodos, todos os quais parecem falhar. A maioria dos métodos aponta para adicionar o script de inicialização a um dos arquivos rc.local:

/etc/rc.d/rc.local
/etc/rc.local

E o conteúdo de rc.local contém a linha:

/opt/TeamCity/bin/teamcity-server.sh start

Nenhum dos quais iniciará o servidor teamcity

Não há problemas se eu executar o script manualmente.

Parece simples, mas como faço para que um script de shell seja executado automaticamente?

atp03
fonte
1
Você precisará descrever o que você quer dizer com 'nada disso funciona'. Porque sem ele, todo mundo está adivinhando. Talvez descreva com mais detalhes o que você fez e que mensagens ou eventos de saída ou falha ocorreram?
EightBitTony
esse é o local correto para colocá-lo, então parece que algo não é kosher com a entrada local /etc/rc.d/rc.local ou com o próprio script. Você é capaz de publicar o conteúdo do script e do rc.local? Além disso, o script de shell teamcity-server.sh é executado quando você o faz manualmente?
Quinn Murphy
Sim, o teamcity-server funciona bem manualmente. Mas não é prático para fazer isso toda vez que o servidor for reiniciado ...
atp03
Fazer com que seja executado manualmente, mas não através do rc.local, implica diferenças ambientais. Qual é o seu PATH? Alguma outra variável env?
cjc 14/05
@cjc Não sei o que você quer dizer com 'PATH' - No entanto, se eu executar o /etc/rc.d/rc.local manualmente, o servidor teamcity também poderá começar bem. Isso ainda faz diferença?
Atp03

Respostas:

15

Se o script de inicialização do teamcity for um script de inicialização compatível com LSB (ou seja, se fornecer iniciar , parar e outros argumentos ), você poderá simplesmente copiar o script para a /etc/init.dpasta e executar (como root):

# chkconfig --add <script_name>
# chkconfig <script_name> on

Um link simbólico para o arquivo também deve estar OK. Então tente (como root):

# ln -s /opt/TeamCity/bin/teamcity-server.sh /etc/init.d/teamcity-server
# chkconfig --add teamcity-server
# chkconfig teamcity-server on

Se não iniciar na inicialização, mas iniciar manualmente sem problemas, verifique:

  1. permissões (talvez o programa não possa ser executado como root. Tente fazer logon como root e execute-o) e;
  2. seu PATH (talvez o script precise de algo, mas não sabe onde está).

Para imprimir o conteúdo do seu PATH, basta executar:

echo $PATH

Para verificar se o motivo para o script não iniciar é o PATH, tente:

$ cd /
$ PATH= /opt/TeamCity/bin/teamcity-server.sh

Este comando limpará temporariamente seu PATH e executará o comando. Se o comando precisar de algumas informações específicas sobre o PATH, ele falhará (tenha o cuidado de executar exatamente como indicado acima, um espaço entre PATH = e o restante do comando).

Diego Queiroz
fonte
6

no comando Fedora 17

# chkconfig --add teamcity-server

diga: o serviço teamcity-server não suporta chkconfig, você deve adicionar um cabeçalho como:

#! /bin/bash
# chkconfig: - 10 90

somente depois disso execute o primeiro comando.

burtsevyg
fonte
2
E verifique se o script está localizado no /etc/init.d/:-)
Bart De Vos
2

Quando o script é executado manualmente, ele funciona corretamente. Mas, quando executado automaticamente, não funciona.

Eu encontrei o culpado: o TeamCity é executado sob o usuário teamcity. Ele deve estar presente no /etc/sudoersarquivo e você deve adicionar, usando visudouma linha como esta:

Defaults:teamcity !requiretty
kupolua
fonte