Maneira correta de instalar um serviço upstart personalizado

51

Estou usando o iniciante para serviços nos meus servidores. Escrever um arquivo conf e colocá-lo /etc/inité fácil, mas isso não parece ser completamente instalado. Por um lado, o service --status-allnão lista o meu novo serviço. Eu verifiquei e se eu fizer um link em /etc/init.dque /lib/init/ubstart-jobele vai aparecer no status. Mas fazer isso manualmente me faz pensar que não estou fazendo certo, e pode haver outras etapas de configuração que não estão sendo feitas.

Qual é a maneira correta de instalar um serviço inicial, de forma que seja registrado corretamente em todas as ferramentas que lidam com serviços?

edA-qa mort-ora-y
fonte
2
Esse cara respondeu uma das minhas perguntas usando o serviço de arrivista e deu uma explicação detalhada, pode apontar um passo que poderia ter sido perdidas askubuntu.com/a/278128/75967
Meer Borg
11
Você quis dizer /lib/init/upstart-job?
dalore

Respostas:

46

Quando você copia inicialmente um novo arquivo conf para a pasta / etc / init, é necessário chamar:

initctl reload-configuration

Por isso, seu iniciante deve ser registrado corretamente.

Tombert
fonte
8
Portanto, isso configura corretamente o trabalho (ou seja, starte stoptrabalho), mas não faz com que o trabalho apareça no status all. Eu ainda tinha que adicioná-lo manualmente /etc/init.d/para que isso acontecesse.
James McMahon
11
@JamesMcMahon Você precisa executar initctl listcomando com sudo: sudo initctl list. Dessa forma, você verá a lista completa de serviços.
Shahriyar Imanov
Por que o sudo, ele não parece alterar a saída da lista initctl?
LovesTha
@JamesMcMahon I still had to manually add it to /etc/init.d,. Você ainda tinha que adicionar o que? Isso significa que, além de um X.confarquivo adicionado /etc/init, também é necessário adicionar um arquivo /etc/init.d?
27516 Kevin Meredith
@ KevinMeredith, desculpe, eu não estava mais detalhado. Faz dois anos e não me lembro das especificidades. Se você olhar para alguma documentação init.d, esperamos que fique claro.
James McMahon
18

Confira o manual de serviço:

service --status-all executa todos os scripts init, em ordem alfabética, com o comando status. Essa opção chama apenas o status de tarefas sysvinit; as tarefas iniciadas podem ser consultadas de maneira semelhante com a lista initctl.

(enfase adicionada)

É por isso que adicioná-lo ao /etc/init.d (onde estão os trabalhos sysvinit) fez esse trabalho. Então: tente executar a lista initctl :).

Kyle
fonte
That's why adding it Adicionando o que? Além do my_service.confarquivo /etc/init, também é necessário ter um /etc/init.darquivo?
27716 Kevin Meredith
Não está funcionando com o Ubuntu 16.04.4 LTS \\ $ initctl list initctl: O nome "com.ubuntu.Upstart" não existe $ sudo initctl list initctl: Não foi possível conectar-se ao Upstart: Falha ao conectar-se ao socket / com / ubuntu / upstart: Conexão recusada
nine9five
13

Para serviços SysV

Certifique-se de seguir as seguintes etapas ao adicionar / criar um novo serviço no Ubuntu.

  1. Crie o arquivo de serviço em /etc/init.d/<service name>
  2. chmod 700 /etc/init.d/<service name>
  3. update-rc.d <service name> defaults
  4. update-rc.d <service name> enable

Agora vejo você em serviço

service --status-all
Suyash Jain
fonte
15
sua resposta está relacionada ao sysv e não ao iniciante. você pode excluí-lo.
precisa saber é o seguinte
3
É uma resposta útil, de fato.
ATorras 28/02
apesar de se relacionar com outro serivice, é realmente útil
wuppi 13/07
1

Descobri que um erro no arquivo .conf pode tornar o trabalho não reconhecível pelo initctl. por exemplo, ter uma setuidlinha no Upstart versão 1.3 ou anterior.

jcomeau_ictx
fonte
1

Embora a resposta escolhida atual esteja correta para que o novo serviço seja adicionado ao inicio do processo, não é particularmente útil descobrir por que uma configuração no / etc / init / está falhando ao carregar - a peça que falta está usando o init-checkconf primeiro para garantir sua configuração é válida e, em seguida, usando reload-configuration:

####Test the new config - resolving any issues before continuing:
ERROR: File /etc/init/test.conf: syntax invalid:
test.conf:35: Unterminated quoted string

####then fix and recheck:
# init-checkconf /etc/init/test.conf
File /etc/init/test.conf: syntax ok

####then reload:
# initctl reload-configuration

#### and start:
# start test
Jeff Parsons
fonte