/etc/init.d
中有一项服务,希望在启动时自动启动。我记得它与将脚本符号链接到/etc/rc.d
目录有关,但是目前我还不记得。这是什么命令? 我相信我正在使用Fedora / CentOS衍生产品。
#1 楼
如前所述,如果您使用的是基于Red Hat的系统,则可以执行以下操作:创建脚本并将其放置在
/etc/init.d
中(例如/etc/init.d/myscript
)。该脚本应具有以下格式: #!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: /etc/init.d
{start|stop|status|restart}"
esac
exit 0
该格式非常标准,您可以查看
/etc/init.d/myscript start
中的现有脚本。然后,您可以像chkconfig myscript start
或ckconfig
这样使用脚本。 /etc/init.d/functions
手册页解释了脚本的标题: 启用脚本
> This says that the script should be started in levels 2, 3, 4, and
> 5, that its start priority should be 20, and that its stop priority
> should be 80.
检查脚本是否已启用-选择的级别应显示为“ on” 。
$ chkconfig --add myscript
$ chkconfig --level 2345 myscript on
评论
Chkconfig是您想要的。 +1
–哇
2011年9月9日上午8:31
为什么要在运行级别2、3、4和5上启动init?您是否需要避免避免在运行级别2启动服务器?而且在RHEL上未定义运行级别4,那么为什么尝试在该运行级别启动它?不批评,只想知道。我是本地Slackware用户。
–布鲁斯·埃迪格(Bruce Ediger)
2011年9月9日下午13:35
RHEL上没有定义4,但确实存在。您可以为自己的东西偷东西。
–凯文M
2011年9月9日下午16:25
标头取自chkconfig手册页。在大多数情况下,我个人坚持使用235或35。
–罐头
2011-09-10 6:33
如果在启动过程中启动失败,是否可以查看日志?
– Utkarsh Sinha
2014年5月29日13:17
#2 楼
您进行测试,您的计算机通常会开始进入哪种运行级别。 Ubuntu使用2,而以前使用的发行版则一直使用1单用户(超级用户)
2多用户
3多用户+网络
4个未使用/用户可定义的
5个多用户,网络+ X11
'在此运行级别(此处:2)中启动此脚本。
XY是两位十进制数字,与序列相关,脚本将启动。
如果您先运行脚本S45barfoo,而S55foofoo取决于您的脚本,则可以在45到55之间选择xy。对于相等的数字,启动顺序是不确定的。
Ubuntu同时切换(正在切换)到另一个启动程序,称为
/etc/init.d/foobar
。 并注意:并非总是链接到
/etc/rc2.d/SXYfoobar
的链接-有时是upstart
或类似的东西,但是应该容易找到,位于/ etc下。 如果要在启动脚本的末尾启动某些内容,则将查找文件
/etc/rcX.d
,但是如果它取决于已经运行的X11,则可能会寻找台式机的自动启动选项环境,或具有与上述类似模式的/etc/init/rcX.d
。驱动/etc/rc.local
。 评论
没有为您执行符号链接的命令吗?我以为我想起了类似的事情。
– Naftuli Kay
2011年9月9日在3:04
不是update-rc.d吗?
– Naftuli Kay
2011年9月9日在3:07
GUI还是命令行?您的DE可能会提供一个工具来标记运行级别以及在何处启动或停止脚本。我见过类似的内容,但不记得名称,以及如何指定数字(xy)。
–用户未知
2011年9月9日在3:08
命令行。它为您处理符号链接,并允许您切换是否运行某些脚本。
– Naftuli Kay
2011年9月9日,下午3:11
#3 楼
正如Naftuli Tzvi Kay在上面有关Debian的问题那样:从Debian 6开始,您的脚本应包含一个LSB(Linux标准库)标头,该标头指示其依赖关系和功能(请参见debian wiki页面)。如果是LSB标头存在,您可以使用
insserv
在引导过程中包含您的脚本(请参见另一个debian wiki页面)。#4 楼
在此答案中,假设我要通过Ubuntu系统上的服务脚本通过/etc/fstab
挂载mount -a -t cifs
中定义的Windows共享(CIFS)。首先,我在/etc/init.d/mountcifs
下创建一个条目,其内容为:#! /bin/sh
### BEGIN INIT INFO
# Provides: mountcifs
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Mounts / Umounts Window Shares (CIFS)
# Description: Mounts / Umounts Window Shares (CIFS)
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/lsb/init-functions
case "" in
start)
mount -a -t cifs
;;
stop)
umount -a -t cifs
;;
restart|reload|force-reload)
umount -a -t cifs
mount -a -t cifs
;;
*)
# echo "Usage: sudo update-rc.d mountcifs defaults
start|stop" >&2
# exit 3
;;
esac
请注意注释中的
# Default-Start: 2 3 4 5
。我们可以使用以下命令让Ubuntu创建符号链接:sudo service start mountcifs
df -h # should see Windows Shares
sudo service stop mountcifs
df -h # all Windows Shares should be gone
sudo service start mountcifs
df -h # all Windows Shares should be back
然后我们可以如下测试脚本: 。
评论
这取决于您的操作系统。您正在运行哪种unix变体,如果是Linux,则运行什么发行版?在/etc/init、/etc/init.d、/etc/rc.d、/etc/rc.local中,还有其他几个?我想我正在使用CentOS或类似的产品。 Debian的答案会有所不同吗?我也对Debian的解决方案感兴趣。