Como posso criar um script de inicialização que inicie vários programas requeridos pelo Rails?

2

Quando inicio minha VM vmware Ubuntu 12.04, abro o terminal e executo os seguintes comandos.

sudo /etc/init.d/postgresql start 
sudo /etc/init.d/apache2 start
cd sites/name_of_rails_app
bundle exec rake sunspot:solr:start
bundle exec rake sunspot:solr:start RAILS_ENV=test
rails s

E o servidor rails começa então nessa janela do terminal.

Existe uma maneira de automatizar todo ou a maior parte desse processo? Tudo menos o rails s em um terminal, talvez?

Eu olhei para Startup Applications, e meu comando postgresql (incluindo 'sudo') está lá, mas eu ainda tenho que iniciar manualmente o servidor postgresql, então não tenho certeza de como / se essa ferramenta funciona. / p>

Obrigado!

    
por Chris Riley 29.09.2012 / 20:06

2 respostas

0

Não sou muito bom nessas coisas, mas eis algumas ideias sobre onde começar a procurar.

A maior parte é provavelmente um exagero para a sua situação, por isso concentre-se nas sugestões # 2 e # 4. Isso é especialmente importante se você precisar de algo em primeiro plano, porque as outras duas sugestões não têm um primeiro plano associado.

Já que você mencionou a palavra mágica, "servidor", as outras duas opções podem valer a pena considerar também.

1) Quando o Linux inicializa, ele passa por um ou mais níveis de execução para ser executado. (O nível de execução faz o que varia um pouco de distro para distro.) Cada nível de execução possui um conjunto de scripts que são executados quando o nível de execução é iniciado. Os próprios scripts vivem em /etc/init.d. Cada nível de execução tem um diretório /etc/rcx.d onde x é o nível de execução 0 - 6. Eu acho que 3 é para funcionar normalmente, mas você terá que verificar.

Em cada um desses diretórios, você coloca links simbólicos em seus scripts que estão em /etc/init.d e os nomeia começando com um prefixo de dois dígitos. Quando o nível de execução é iniciado, todos os scripts em seu diretório são executados em ordem pelos números de prefixo para que as coisas ocorram de uma maneira ordenada e previsível. Adicione um link (com um prefixo de número alto para que seja executado depois de tudo o que já está lá) em seu script em rc3.d (ou qualquer que seja o nível de execução correto para o seu sistema).

Se você quiser se interessar, há um arquivo chamado skeleton em /etc/init.d que mostra um pouco sobre todos os recursos disponíveis. Por exemplo. Você pode escrever seu script como uma declaração de caso grande com um caso para START, STOP, etc. e criar uma ligação simbólica nos níveis de execução apropriados para iniciar seu programa e depois desligá-lo quando o sistema estiver sendo encerrado. Se você fizer isso, o link simbólico que você adiciona aos níveis de execução do desligamento deve ter um prefixo numérico baixo, de modo que seja feito antes que todo o resto que possa precisar tenha sido encerrado.

Veja as notas do PATH no esqueleto. Os caminhos que você tem disponíveis durante as alterações no nível de execução são muito restritos, então você não tem acesso a tudo.

Se você seguir esse caminho, faça backups e tenha um live CD, etc. pronto, caso você faça alguma coisa que quebre a sequência de inicialização.

2) Quando o bash inicia o seu usuário (geralmente, uma vez por sessão), ele roda o ~ / .profile, que é um script bash que pode rodar o que você quiser para o seu usuário em particular.

Quando um shell bash individual é iniciado (pode acontecer muitas vezes por sessão), outro script, ~ / .bashrc também é executado. Você pode executar seu script a partir de qualquer um desses, conforme apropriado. É muito mais parecido com o que você normalmente faria em um terminal, então é muito mais fácil e seguro fazer isso.

Como as coisas executadas dessa forma estão associadas ao seu usuário, elas serão encerradas quando você fizer logout, a menos que você faça coisas especiais como usar o nohup em seus scripts.

3) Você pode armazenar seu script em algum lugar do sistema como / usr / bin ou / usr / local / bin e configurar o cron para executá-lo adicionando uma entrada no crontab do sistema ou no crontab do seu usuário.

Se o seu sistema ficar muito ocupado, você deve adicionar um cheque no seu script para que ele não faça nada extra se outra instância dele já estiver em execução ou tiver sido executada desde a última inicialização.

Se você usa um notebook ou outro sistema que é desligado com frequência, verifique se o anacron está instalado e funcionando. Logo após a inicialização, ele (mais simplificado) examina as atividades do cron para ver se alguma delas foi perdida enquanto o sistema estava desligado e as executou. Normalmente, programar coisas para serem executadas logo após a meia-noite simplifica as coisas, para que seja menos provável que algo seja executado duas vezes no mesmo dia.

4) Se você usa um desktop gui como o kde ou o gnome, eles têm utilitários de script de inicialização que executam as coisas para você. O kde os coloca em $ HOME / .kde / Autostart. Você pode colocar seu script lá.

As mesmas considerações se aplicam que foram anotadas na sugestão # 2.

    
por Joe 03.10.2012 / 21:02
0

Crie seu próprio arquivo de script de shell e cole o código de inicialização (que você sempre escreve no terminal) no código-fonte do arquivo de script de shell:

#!/bin/sh
sudo /etc/init.d/postgresql start 
sudo /etc/init.d/apache2 start
cd sites/name_of_rails_app
bundle exec rake sunspot:solr:start
bundle exec rake sunspot:solr:start RAILS_ENV=test
rails s

E, em seguida, coloque este script de shell em algum lugar e adicione seu caminho de arquivo ao seu $PATH . E então abra seu Terminal e escreva o nome do arquivo do seu script de shell e pressione ENTER .

    
por Ziyaddin Sadigov 03.06.2013 / 15:19