script init.d não sendo executado na inicialização

4

Meu script não está sendo executado na inicialização em uma caixa errante no Ubuntu.

Meu script é assim -

#!/bin/bash
# /etc/init.d/mailcatcher
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
mailcatcher --http-ip 192.168.50.10

Minhas permissões no arquivo são assim -

-rwxr-xr-x 1 root root 352 Apr 30 09:59 mailcatcher.sh

Eu corro o comando -

sudo update-rc.d "mailcatcher.sh" defaults

Se eu executar o script manualmente, ele funciona e inicia o mailcatcher. Se eu reiniciar o computador, o daemon mailcatcher não será iniciado. Estou faltando alguma coisa?

    
por ILikeTurtles 30.04.2015 / 19:13

2 respostas

8

E agora para as respostas do Ubuntu.

Esta é uma questão do Ubuntu Linux, e a versão 15 agora é lançada. O mundo do Ubuntu agora tem systemd. Mas, mesmo antes da versão 15, o mundo do Ubuntu já tinha sido lançado. Não há realmente uma razão para escrever scripts do System 5 rc ; e certamente não há boas razões para começar de lá.

Tanto o upstart quanto o systemd fazem todos os "controles de serviço". Tudo o que você precisa fazer é descrever o serviço .

systemd

Uma unidade de serviço systemd, a ser colocada em /etc/systemd/system/mailcatcher.service , é

[Unit]
Description=Ruby MailCatcher
Documentation=http://mailcatcher.me/

[Service]
# Ubuntu/Debian convention:
EnvironmentFile=-/etc/default/mailcatcher
Type=simple
ExecStart=/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

[Install]
WantedBy=multi-user.target

Isso obtém automaticamente todos os controles systemd, como:

  • systemctl enable mailcatcher.service para definir o serviço para ser iniciado automaticamente na inicialização.
  • systemctl preset mailcatcher.service para configurar o serviço para ser iniciado automaticamente na inicialização, se a política local permitir.
  • systemctl start mailcatcher.service para iniciar o serviço manualmente.
  • systemctl status mailcatcher.service para ver o status do serviço.

upstart

O Upstart é semelhante, e a modificação do arquivo de trabalho inicial da Fideloper LLC para essa pergunta fornece isso para /etc/init/mailcatcher.conf :

description "Mailcatcher"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec /usr/bin/mailcatcher --foreground --http-ip=192.168.50.10

Isso obtém automaticamente todos os controles iniciantes, como:

  • initctl start mailcatcher para iniciar o serviço manualmente.
  • initctl status mailcatcher para ver o status do serviço.

Seção de daemontools de bônus

Para chutes, para o entretenimento de qualquer pessoa daemontools que use a família que o alcance através de uma pesquisa WWW, e para demonstrar outra razão para não começar no System 5 rc scripts, eu corri aquela unidade de serviço do sistema através de < o comando convert-systemd-units do conjunto de ferramentas do nosh para produzir o seguinte script de execução da família daemontools:

#!/bin/nosh
#Run file generated from ./mailcatcher.service
#Ruby MailCatcher
chdir /
read-conf --oknofile /etc/default/mailcatcher
/usr/bin/mailcatcher --foreground --http-ip 192.168.50.10

Na verdade, o comando convert-systemd-units gera um diretório de pacote de serviços nosh completo . Com esse diretório, que especifica informações de dependência e ordenação, instaladas como /var/sv/mailcatcher em um sistema com o nosh service-manager , obtém-se todos os controles nosh, como:

  • system-control enable mailcatcher.service para definir o serviço para ser iniciado automaticamente na inicialização.
  • system-control start mailcatcher.service para iniciar o serviço manualmente.
  • system-control status mailcatcher.service para ver o status do serviço.
  • system-control preset mailcatcher.service para configurar o serviço para ser iniciado automaticamente na inicialização, se a configuração local (predefinições no estilo systemd ou /etc/rc.conf{,.local} ) permitirem.

Nem sequer inicie com o System 5 rc files.

Veja este modelo usado pelo SaltStack for System 5% de scriptsrc. Mesmo com a parametrização de SaltStack eliminada, são 59 linhas de código de script de shell, a maioria das quais é genérica que você teria que reinventar e reescrever. Novamente. E Celada já apontou onde você reinventou mal.

O arquivo de unidade do systemd tem 11 linhas de comprimento. O arquivo de trabalho inicial é de 8 linhas. O script nosh run é 6. E eles fazem todos os mecanismos de início / parada / status para você. Não comece com o System V rc , especialmente no Ubuntu Linux.

Leitura adicional

por 04.05.2015 / 12:51
3

Ao executar um comando durante a inicialização, não temos necessariamente acesso ao env para esse comando. Eu precisava usar o nome totalmente qualificado para esse comando.

Não funciona no arranque

mailcatcher --http-ip 192.168.50.10

Funciona na inicialização

/usr/bin/mailcatcher --http-ip 192.168.50.10

Meu script agora está funcionando, mas planejo adicionar controles de serviço para que você comece e pare de trabalhar mais tarde.

    
por 30.04.2015 / 21:45