Muitos daemons são executados usando o bash como linguagem de script. Você não terá problemas para usá-lo.
Eu gostaria de criar uma caixa totalmente automatizada (baseada em algo como uma placa Raspberry-Pi ou OLinuXino).
Minha caixa rodaria um sistema baseado em Debian com um sistema de arquivos somente leitura e um ramdisk (para evitar corrupções no cartão SD).
Eu gostaria de criar um script que se conecte automaticamente a um servidor remoto (via ssh) cada vez que a caixa for ligada ou conectada a uma rede.
Para fazer isso, acho que minha solução mais simples é criar um script de shell executando como um daemon. Esse daemon terá que permanecer ativo até que a caixa seja desligada ou desconectada da rede. O script deve poder se reconectar quando a rede estiver ativa ou a caixa for reiniciada.
A pergunta: você acha que um shell script é seguro o suficiente para fazer isso? Ou devo usar melhor outra (e mais segura) linguagem de programação (PERL, C, ...)?
Muitos daemons são executados usando o bash como linguagem de script. Você não terá problemas para usá-lo.
Como regra geral, é bastante complicado criar um daemon no bash (ou shell-script em geral). Alguns problemas como bifurcação de fundo, saída e redirecionamento de mensagens de erro ou manipulação de sinais não são fáceis de acertar.
Para o problema específico que você descreve, já existe algum software (gratuito) fazendo conexão ssh automática com o respawn.
Eu uso autossh
para essa finalidade. Ele é empacotado no Debian e funciona muito bem.
É bastante seguro, mas pode ser menos que útil, a menos que bash
esteja em condições de lidar com a limpeza. Se for morto por qualquer motivo, o script precisa ser capaz de se atualizar, a fim de atualizar seu estado conforme necessário - você provavelmente não quer simplesmente fazer:
while :
... por exemplo. Isso envelhece bem rápido. Em vez disso, talvez faça algo como:
trap '' HUP EXIT
set_state() { echo stuff="'$(otherstuff)'"... ; }
chk_interval() { wait for something... ; }
exec_me() { exec env - $(set_state) "$0" <in >out 2>alsoout & ; }
chk_interval
exec_me
Também pode depender de quem está fazendo a limpeza. O meio mais simples de implementar um daemon é:
init=path/to/executable/script
... na linha de comando do kernel para instalações particularmente de propósito único. Onde o exec
relativo inferido aqui é o initramfs /
.
Tags bash