我已经创建了一个启动服务器的脚本(我的第一个问题)。现在我想让它在系统启动时运行并启动定义的服务器。我应该怎么做才能做到这一点?
我的发现告诉我将此文件放在该/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
答案1
/etc/init.d
是脚本目录,可执行脚本出现在其中。但是,为了在系统启动后按特定顺序运行脚本,您需要将文件添加到目录中/etc/rc#.d
。此处出现的条目告诉您的系统应按什么顺序以及在哪个运行级别运行脚本/etc/init.d
。根据此图表,rc 后面的数字表示机器在哪个运行级别运行:
http://en.wikipedia.org/wiki/Runlevel
因此如果你有:
/etc/init.d/importantscript
然后你需要(空)文件:
/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript
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
答案2
你不必——也不应该——在中创建文件/etc/rc.d/rcN.d/
;你应该做的是在初始化脚本中添加注释
# chkconfig NNN A B
其中NNN
是您希望脚本在其中处于活动状态的运行级别集(例如,345
如果它在运行级别 、 和 中处于活动状态3
)4
,5
并且A
和B
是启动和停止优先级。然后chkconfig --add foo
(假设您的脚本名为)将使用适当的名称foo
创建 中的文件。/etc/rc.d/rcN.d/
然后,您可以使用service foo bar
将bar
消息发送到您的脚本(例如start
,,,stop
无论什么 - 这就是您的来源$1
)。