Как запустить скрипт через 5 минут после запуска?

У меня есть несколько сайтов RoR, запущенных на моем веб-сервере, и мне нужно запустить скрипт ruby ​​при запуске.

Итак, я добавил сценарий bash в /etc/init.d, который вызывает процесс ruby. К сожалению, этому процессу ruby ​​нужны некоторые вещи, которые еще не загружены.

Я пытался добавить sleep 300 в начале моего сценария bash, но это не очень помогает, потому что это также влияет на запуск таких вещей, как ssh, apache и т. д.

Кроме того, я не хочу загружать все библиотеки ruby ​​при запуске, потому что это замедлит время загрузки.

4 ответа

Решение

sleep 300 это путь, но вам нужно поместить его в функцию, которую вы будете называть асинхронной:

myscript()
{
    sleep 300

    # do what you want
}

myscript &

# continue with other things

Спать пять минут - довольно нестабильный взлом. Что, если что-то позднее в цепочке загрузки займет необычно много времени для запуска? И почему вы хотите, чтобы ваша система загружалась дольше, чем необходимо?

Правильный способ сделать это - запустить скрипт запуска после того, от чего он зависит. Как вы это делаете, зависит от дистрибутива.

В Debian вы указываете в заголовке скрипта, какие зависимости ваш скрипт имеет: Вот пример из /etc/init.d/README в Debian Wheezy:

# Required-Start:    $remote_fs $syslog

В других системах вы обычно называете скрипт с номером где-то в имени файла в одном из /etc/rc?.d/ папка. На таких дистрибутивах просто дайте ему большее число, чем то, от чего зависит.

Создать файл: delay

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

sleep $1
exec $2

затем

chmod a+x delay
delay 10 "xxx"

положить его в /etc/rc.local

Интересно, можно ли запустить другой поток, и первое, что делает поток, это sleep 300. Затем он вызвал бы скрипт, который вы бы вызвали из init.d

Я думаю, что это будет что-то вроде

newscript &
Другие вопросы по тегам