Uma compreensão mais profunda do init.d - como eles podem chamar? qual é o ambiente [fechadas]

1

Eu preciso de alguma educação sobre o sistema init.d no Linux (Ubuntu 12.04, 64 bit, no meu caso), eu encontrei centenas de sites (não, eu não olhei para todos eles, mas eu li alguns eles) que me dizem como escrever um script init.d e como criar o symlink em /etc/rc2.d. Ainda sinto falta de compreensão e capacidade de criar consultas do Google que possam me fornecer as respostas de que preciso. Então,

Eu sei que meu script init.d é iniciado. Eu tenho eco mensagens de log em um arquivo, assim eu sei que ele está funcionando, e. antes que o perfil de qualquer usuário seja executado. A questão é qual é a natureza do ambiente em que ele está sendo executado. O que acontece com a saída enviada para o STDOUT? Escreve para um terminal virtual em algum lugar? Isso afeta alguma coisa?

O "programa" que eu quero lançar do script init.d é um shell script, my_shell_script , que envolve meu programa real, my_program . O script configura várias variáveis de ambiente, incluindo o PATH e LD_LIBRARY_PATH , depois lança my_program .

Devo modificar a linha que lança o my_program para redirecionar suas saídas para / dev / null? Ditto STDERR? Se a linha de lançamento tiver um NULL < 1 (ou é NULL < & 1?), STDIN será desconectado?

No meu script init.d, quando quero iniciar o script de shell, qual é a maneira correta de chamá-lo?

my_shell_script

ou

. my_shell_script

ou

sh my_shell_script

e devo usar sh ou bash. Eu acho que usar o necessário para fazer o script funcionar? ou seja, bash se houver não-sh bash lá?

Quando o script init.d tenta iniciar my_shell_script , ele precisa fazer o mesmo redirecionamento em STDIN, STDERR e STDOUT?

Agora, meu_programa foi originalmente desenvolvido como um programa de terminal aberto com uma janela gráfica. O programa principal lança a janela gráfica, então lança dois xterms com programas separados rodando neles (eu não tenho idéia do porquê, eu os herdei). Todos os três programas rodam para sempre, mas não são daemons: apenas loops infinitos. O programa principal vigia para certificar-se de que os outros dois estão funcionando e os relançará se eles pararem.

Os programas que eu lançar serão daemons? Ou os aplicativos sem terminação estão ok? Na linha de lançamento em my_shell_script rmd com um & então o script pode continuar após o lançamento e retornar ao script init.d?

my_program , detecta que a janela gráfica pode / não foi iniciada (para que eu possa fazer o telnet / ssh no servidor onde ele é executado e (re) iniciá-lo). Se ele não executou uma janela da GUI, ele inicia os outros dois programas-filhos na mesma janela de terminal (telnet) e toda a saída gráfica é enviada como saída de texto não gráfica para esse terminal e arquivos de log.

Quando eu faço o ssh / telnet no meu servidor de desenvolvimento, o .profile é executado. .profile contém praticamente tudo my_shell_script contém, exceto ele usa o programa screen para lançar o my_program para que o logout da sessão telnet / ssh não termine o my-program . Vou precisar do programa de tela em volta do my_program no esquema init.d.

O ambiente init.d time parece um terminal? Suponho que pareça um ambiente de nível de execução 1 e a janela da GUI não pode abrir e que o "terminal" é a única saída.

Por fim, qual é a melhor maneira de interromper meus aplicativos em execução? No momento, quando eles são executados como aplicativos de usuário, eu uso o killall's para impedi-los de não ter como dizer para eles se desligarem.

    
por Wes Miller 21.12.2012 / 20:29

1 resposta

2
http://upstart.ubuntu.com/cookbook/

Upstart é o sistema de inicialização do Ubuntu. O livro de receitas deve ser útil.

Se você deseja conectar-se ao terminal iniciado a partir do sistema init, é mais provável que você experimente o tmux.

    
por 21.12.2012 / 21:18