Debian: Como executar um script na inicialização sem precisar escrever 30 linhas de shell script?

20

Eu tenho um servidor Debian e só preciso executar um script na inicialização.

Eu li o seguinte: https://www.debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

Eu tenho agora: insserv: warning: script 'falta tags e substituições LSB

então parece que eu tenho que adicionar agora:

### 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

Agora parece louco: são 30 linhas de script apenas para executar um programa na inicialização.

Existe uma ferramenta que permita fazer isso de maneira simples?

Saudações

yarek
fonte
Que tipo de script é esse? Você tentou executá-lo em /etc/rc.local? Você pode colocar o caminho para o script no arquivo rc.local e ele será executado no momento da inicialização.
Diamant
um script simples que inicia um processo de nó, inicia um php etc ...
Yarek
Conto 9 linhas, não 30. E são comentários, não shell script (e não script SSH).
wurtel
Eles são cabeçalhos LSB (consulte wiki.debian.org/LSBInitScripts ) e um boilerplate de script init LSB fica ao norte de 70 linhas (consulte github.com/fhd/init-script-template/blob/master/template ). Se você deseja que um único comando executado manualmente seja manuseado na inicialização pelo computador através de algum arquivo em / etc, isso parece uma cerimônia bastante elaborada!
kristopolous

Respostas:

29

Se o seu script for "apenas um script" e não iniciar um daemon, considere usar /etc/rc.local(executado como root) ou crontab(executado como usuário de sua escolha).

Dois exemplos:

  • /etc/rc.local

    #!/bin/sh -e
    #(Multiple lines of comments removed.)
    /usr/local/bin/your-script.sh
    exit 0
    
  • crontab(editado por, por exemplo crontab -e)

    #(Multiple lines of comments removed.)
    @reboot /usr/local/bin/your-script.sh
    

Editar 1: Apenas leia seu comentário: Se o seu script iniciar daemons, que deve ser executado o tempo todo, eu desaconselharia o uso de rc.localou crontabe, em vez disso, escrevesse um init.d(s) script (s) apropriado (s). Dessa forma, você / seu sistema é capaz de reiniciar / recarregar / iniciar / parar de maneira limpa os daemons.

Edit 2: Você o considera louco, mas LSB tagsfornece algum valor: "Ao documentar as dependências em tempo de execução dos scripts init.d, torna-se possível verificar a ordem de inicialização atual, ordenar a inicialização usando essas dependências e executar scripts de inicialização em paralelo para acelerar o processo de inicialização ". Para mais detalhes, acesse o wiki do Debian .

(A propósito: é um aviso, na verdade, cabe a você, como e o que fazer com isso.)

gf_
fonte
Eu gosto da versão crontab .. mas não acho que o @reboot funcione no debian!
yarek 11/11/2015
@ yarek: Funciona usando isso sozinho (para scripts, que são apenas scripts).
gf_ 11/11/2015
2
ele funciona, mas eu acho que é apenas para usuário root, então você tem que fazer@reboot root /usr/local/bin/your-script.sh
Froggiz
btw eu estava falando sobre debian!
Froggiz 11/11
Ainda estou bastante confuso: o cron permite executar anyscript quando o servidor reiniciar, não abrindo sessões como raiz.
yarek 11/11/2015
0

supervisord também é uma opção. Você escreverá novamente algumas linhas para iniciar o material node.js e PHP, mas serão menos.

adamo
fonte
0

Você pode usar o monitd para isso, basta escrever uma definição de monit e ele iniciará daemons para você. Mas por que você não usa o caminho correto com scripts LSB? Não é tão difícil escrever (você está escrevendo apenas uma vez) e é a maneira mais limpa e valiosa de conseguir isso.

Ondra Sniper Flidr
fonte