script init.d não iniciando na inicialização

3

Eu tenho o que considero ser um script bem simples que desejo executar na inicialização, mas sou muito novo em init.d scripts e talvez exista uma maneira melhor de fazer isso em geral.

Basicamente, quero que meu script seja executado quando o sistema for iniciado, por isso, tenho um script ruby, que movi para /usr/bin e denominei apenas consumer

Por uma questão de brevidade, diga que se parecia com isso, mas na verdade fez alguma coisa:

#!/usr/bin/env ruby

# just example code
puts "do stuff"

Então eu tenho meu script init.d colocado em /etc/init.d e nomeado apenas consumer .

#!/bin/bash
### BEGIN INIT INFO
# Provides:          consumer
# 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 INF

# /etc/init.d/consumer
#

# Some things that run always
touch /var/lock/consumer

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting Consumer"
    consumer &
    echo "Consumer started successfully."
    ;;
  stop)
    echo "Stopping Consumer"
    echo "Nothing happened..."
    ;;
  *)
    echo "Usage: /etc/init.d/consumer {start|stop}"
    exit 1
    ;;
esac

exit 0

Agora, se eu salvar este arquivo e apenas executar sudo /etc/init.d/consumer start , ele funcionará perfeito! Começa e me dá a saída desejada. Então eu corro:

$ sudo update-rc.d consumer defaults
Adding system startup for /etc/init.d/consumer ...
  /etc/rc0.d/K20consumer -> ../init.d/consumer
  /etc/rc1.d/K20consumer -> ../init.d/consumer
  /etc/rc6.d/K20consumer -> ../init.d/consumer
  /etc/rc2.d/S20consumer -> ../init.d/consumer
  /etc/rc3.d/S20consumer -> ../init.d/consumer
  /etc/rc4.d/S20consumer -> ../init.d/consumer
  /etc/rc5.d/S20consumer -> ../init.d/consumer

Mas ao reiniciar o sistema, meu script nunca é iniciado, alguma idéia? Não tenho certeza de qual ação tomar em seguida. Ajustei todas as permissões de scripts para 775 e certifiquei-me de que root também possuísse todas elas.

Qualquer ajuda seria extremamente útil.

    
por JP Silvashy 17.04.2011 / 21:08

3 respostas

2

Fazendo "consumidor &" vai simplesmente fundo a tarefa e vá em frente. Se o shell proprietário terminar, terminará todas as tarefas em segundo plano. Você diz que o script funciona na linha de comando, mas o daemon não vai sobreviver se você sair?

Você deseja iniciar seu daemon com algo como start-stop-daemon.

EDIT: na verdade, ao ler seu texto novamente, não tenho certeza se o consumidor é um daemon afinal? Se você quiser apenas executar algum código na inicialização (por exemplo, faxina), escreva uma linha em /etc/rc.local.

Se o script demorar muito para ser executado, você pode querer negá-lo. Ou seja:

consumer &
disown %1

O script agora sobreviverá ao término do shell. Observe que, se o shell gerar o texto, ele reterá o mesmo tty, o que pode causar problemas, dependendo do que acontece depois que seu shell terminar.

    
por 17.04.2011 / 22:02
2

Tente especificar o caminho completo para consumer . Eu suspeito que não esteja no caminho padrão nesse ponto, por isso não está conseguindo executá-lo.

    
por 17.04.2011 / 22:04
0

Se você estiver usando o Ubuntu, tente usar isto:

link

    
por 19.09.2012 / 01:29

Tags