Как запустить скрипт через 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 &