如何在启动后 5 分钟运行脚本?

如何在启动后 5 分钟运行脚本?

我的网络服务器上运行着几个 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/READMEDebian 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

相关内容