Como criar o CronJob para executar comandos na reinicialização?

0

Por meio do meu host, tenho acesso SSH e um painel de controle. Eu instalei o Rails via SSH em um servidor leve. Eu quero reiniciar o servidor quando ele cair. Eu acho que preciso iniciá-lo manualmente desde que eu quero iniciar dois servidores que são executados em diferentes versões do Ruby.

Eu queria saber se posso usar a área "Cronjob" no meu painel de controle para isso e, em caso afirmativo, qual comando eu preciso.

Por SSH, gostaria de iniciar o servidor da seguinte forma:

cd [app1path] 
bundle exec thin -C /etc/thin/app2.yml start

cd [app2path]
bundle exec thin -C /etc/thin/app2.yml start

É importante que as etapas sejam executadas em seqüência, pois elas parecem entrar em conflito entre si (executá-las como um serviço de init.d apenas inicia uma, por incrível que pareça colocar sleep 60 em uma das duas não fazer um diffrence, mas de qualquer maneira).

Colocar o código abaixo no meu painel de controle não parece fazer nada:

@reboot [app1path; bundle exec thin -C /etc/thin/app1.yml start; cd [app2path]; bundle exec thin -C /etc/thin/app2.yml start

O que funcionaria? Eu ficaria grato por algumas dicas e orientações.

    
por Erwin Rooijakkers 06.09.2014 / 21:35

1 resposta

2

A entrada @reboot é iniciada quando cron é iniciado, mas isso não significa que tudo o que é necessário para executar o aplicativo bundle esteja ativo e em execução. Dependendo da configuração, por exemplo sua rede pode não estar ativa nesse momento.

Eu faria o seguinte no seu caso:

  1. peça ao trabalho de reinicialização para gravar um arquivo exclusivo em algum lugar conhecido
  2. tem um cronjob normal que é executado regularmente, por exemplo a cada X minutos. Esse trabalho verifica se o arquivo exclusivo existe e existe há pelo menos Y minutos.

Se o arquivo existir e tiver idade suficiente, o arquivo será excluído e os comandos para iniciar o pacote serão executados. Com as verificações, você pode ter certeza de que seu comando será iniciado apenas uma vez, aproximadamente entre Y e X + Y minutos após a reinicialização. Você provavelmente pode reduzir o X para 1 e o Y para 1 ou 2, dando um atraso de 1 a 2 a 3 minutos após a reinicialização (você deve obter valores maiores se a sua máquina demorar mais para ficar totalmente em operação).

Uma alternativa é criar um trabalho init.d você mesmo e inseri-lo com links apropriados para que todos os serviços necessários sejam iniciados antes disso. (Como fazer isso depende do tipo de sistema que seu sistema Debian usa: systemd , sysvinit ou algum outro)

    
por 06.09.2014 / 21:59