como executo um script 5mn após a inicialização?

5

Eu tenho vários sites RoR em execução no meu servidor e preciso executar um script Ruby na inicialização.

Então, eu coloquei um script bash em /etc/init.d, que chamam de processo ruby. Infelizmente, esse processo de Ruby precisa de algumas coisas que ainda não foram carregadas.

Eu tentei adicionar um sleep 300 no começo do meu script bash, mas isso realmente não ajuda, porque ele também afeta a inicialização de coisas como ssh, apache, etc ...

Além disso, não quero carregar todas as bibliotecas ruby na inicialização, porque isso diminuiria o tempo de inicialização.

    
por boby lapointe 10.08.2012 / 18:09

4 respostas

8

sleep 300 é o caminho a percorrer, mas você precisa colocá-lo em uma função que será chamada assincrona:

myscript()
{
    sleep 300

    # do what you want
}

myscript &

# continue with other things
    
por 10.08.2012 / 18:19
6

Dormir por cinco minutos é um hack bastante instável. E se algo mais tarde na cadeia de inicialização demorar muito tempo para começar? E por que você quer que seu sistema demore mais do que o necessário para inicializar?

A maneira correta de fazer isso é fazer com que seu script de inicialização seja executado após as coisas de que ele depende. Como você faz isso difere entre distros.

No Debian você especifica no cabeçalho do script quais dependências seu script possui: Aqui está um exemplo de /etc/init.d/README no Debian Wheezy:

# Required-Start:    $remote_fs $syslog

Em outros sistemas, você normalmente nomeia o script com um número em algum lugar no nome do arquivo em uma das pastas /etc/rc?.d/ . Em tais distros, apenas dê um número maior do que o material de que depende.

    
por 10.08.2012 / 19:06
0

Gostaria de saber se você poderia iniciar outro thread e a primeira coisa que o thread faz é sleep 300. Então ele chamaria o script que você chamaria de init.d

Eu acho que seria algo como

newscript &
    
por 10.08.2012 / 18:25
0

criar arquivo: delay

#!/bin/bash
# $1:delay time(s)
# $2:command
# example:
#    delay 10 "conky -d"

sleep $1
exec $2

então

chmod a+x delay
delay 10 "xxx"

coloque em /etc/rc.local

    
por 10.08.2012 / 19:21