我的网络服务器上运行着几个 RoR 网站,我需要在启动时运行一个 ruby 脚本。
因此,我在 /etc/init.d 中放入了一个 bash 脚本,用于调用 ruby 进程。不幸的是,该 ruby 进程需要一些尚未加载的内容。
sleep 300
我尝试在我的 bash 脚本开头添加一个,但是这并没有什么帮助,因为它还会影响 ssh、apache 等程序的启动……
另外,我不想在启动时加载所有的 ruby 库,因为这会减慢启动时间。
答案1
sleep 300
是可行的方法,但您需要将其放在一个称为异步的函数中:
myscript()
{
sleep 300
# do what you want
}
myscript &
# continue with other things
答案2
休眠五分钟是一种非常不稳定的黑客行为。如果启动链中后面的某些东西需要异常长的时间才能启动怎么办?为什么您希望系统花费比必要更长的时间才能启动?
正确的做法是运行启动脚本后它所依赖的东西。如何做到这一点因发行版而异。
在 Debian 中,您可以在脚本头中指定脚本具有哪些依赖项:。以下是/etc/init.d/README
Debian Wheezy 中的一个示例:
# Required-Start: $remote_fs $syslog
在其他系统上,您通常会在某个文件夹中的文件名中用数字来命名脚本/etc/rc?.d/
。在此类发行版中,只需为其指定一个比其依赖的内容更高的数字即可。
答案3
我想知道您是否可以启动另一个线程,并且该线程执行的第一件事是睡眠 300。然后它将调用您从 init.d 调用的脚本
我认为它会是这样的
newscript &
答案4
创建文件: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