如何在启动时执行shell脚本?

vij*_*had 14 linux shell-script centos-5

我创建了一个脚本来启动服务器(我的第一个问题)。现在我希望它在系统启动时运行并启动定义的服务器。我应该怎么做才能完成这项工作?

我的发现告诉我把这个文件放在这个/etc/init.d位置,它会在系统启动时执行。但我无法理解启动时的第一个论点是start什么?这是预定义的某个地方start用作$1吗?如果我想要一个案例startall来启动脚本中的所有服务器,那么我可以管理哪些选项?

我的脚本是这样的:

#!/bin/bash

case "$1" in
start)
     start
    ;;
stop)
    stop
    ;;

restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart)"
;;
esac
Run Code Online (Sandbox Code Playgroud)

aro*_*ick 20

/etc/init.d是脚本目​​录,可执行脚本出现在该目录中。但是,为了在系统启动后以特定顺序运行脚本,您需要将文件添加到/etc/rc#.d目录中。出现在此处的条目告诉您的系统应该以什么顺序以及在什么运行级别运行脚本/etc/init.d。根据此图表,rc 后面的数字表示机器正在运行的运行级别:

http://en.wikipedia.org/wiki/Runlevel

所以如果你有:

/etc/init.d/importantscript
Run Code Online (Sandbox Code Playgroud)

然后你需要(空)文件:

/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript
Run Code Online (Sandbox Code Playgroud)

S 表示开始,K 表示终止。当你的机器启动时,系统会说“啊,我在运行级别 3,让我们跳到 rc3.d 看看'/etc/init.d' 中的哪些脚本需要运行以及以什么顺序运行。” 在这种情况下,系统将按“S”和“S”后面的数字进行排序,并执行“/etc/init.d/importantscript start”。20 仅用于订购目的……您的脚本将在“S19”之后和“S21”之前运行。您只需执行以下操作即可创建这些文件:

sudo touch /etc/rc.d/rc3.d/S20importantscript

这里还有一个很好的总结:http : //www.linux.com/news/enterprise/systems-management/8116-an-introduction-to-services-runlevels-and-rcd-scripts


小智 8

您不必 --- 也不应该 --- 在/etc/rc.d/rcN.d/; 中创建文件;您应该做的是在您的 init 脚本阅读中添加注释

# chkconfig NNN A B
Run Code Online (Sandbox Code Playgroud)

这里NNN是一组在您需要的脚本(例如,对运行级别的345,如果它是活跃在运行级别345),以及AB是启动和停止的优先级。然后chkconfig --add foo(假设您的脚本名为foo)将创建/etc/rc.d/rcN.d/具有适当名称的文件。

然后,您可以使用service foo barbar消息发送到您的脚本(例如,startstop,随便什么 - 这就是您的$1来源)。