红联Linux门户
Linux帮助

在SUSE Linux 10中使用rc.local

发布时间:2014-11-02 15:18:27来源:linux网站作者:penyunwudong

SUSE10中没有rc.local, 感觉用起来不是很方便

suse linux 没有这个档案,另外策略就是也不喜欢使用者这样管理启动服务。

若你有某各服务服务需要是在进入 runlevel 后才执行的话,于 suse 下正规做法应该是自己写一个 rc script 档案放置于 /etc/init.d/ 目录内,然后使用 chkconfig or inssev 程式来管理配置能够于某个 runlevel 环境开机时是否要启用关闭该服务项目。

该 rc script 档案写法可以自己参考一下 /etc/init.d/ 里面现成的 script 档案,应该很容易就写一个自己的版本。


另外 suse 有个 /etc/init.d/boot.local 档案是由 /etc/init.d/boot 这个 script 所启动的,而且是最后 boot script 工作完成要准备进入 runlevel 环境执行各项 rc script 前所执行。而 rh 的 /etc/rc.d/rc.local 档案是 runlevel 环境执行各项 rc script 时最后一个阶段执行的。

所以若你要跑的程式适合于 runlevel 这项服务之前就执行的话,suse linux 可以放于 boot.local 档案。


1 方法一
1.1 步骤一
编辑/etc/init.d/rc脚本,在最后一个exit 0之前,加入以下内容:
rc_local=/etc/rc.d/rc.local
current_runlevel=$(runlevel | awk '{ print $NF }')
if [ -x $rc_local ];then
((current_runlevel>1)) && ((current_runlevel<6)) && {
echo -e "\n\n\n"
echo "-----------------------Startup $rc_local---------------------------"
$rc_local
 }
fi
以上为脚本内容
1.2 步骤二
然后创建/etc/rc.local文件,并赋予755权限:
chmod 0755 /etc/rc.d/rc.local


2 方法二
2.1 步骤一
创建/etc/rc.d/rclocal文件,加入以下内容:
case "$1" in
start)
if ! test -x /etc/init.d/rc.local ; then
echo '/etc/rc.local is not exsit!'
exit 1
fi
/etc/init.d/rc.local &
;;
stop)
;;
esac
以上为脚本内容
2.2 步骤二
创建/etc/rc.d/rc.local,把你要开机执行的脚本都加到里面
2.3 步骤三
chmod 0755 /etc/rc.d/rc.local /etc/rc.d/rclocal
2.4 步骤四

chkconfig --add rclocal


更正:方法二没这么简单,你发现rclocal在rc3.d里面是S01rclocal。如何让rclocal在所有服务中最后启动呢,或者指定在某个顺序启动。在启动服务的时候,有个先后顺序也需要指定,rc3.d里面的S00xx就表示最先启动的服务,然后是S01xx.... 这个指定是在/etc/init.d/xx 脚本里面指定的,具体请参照mysql的启动脚本, 有很详细的英文注释:
# MySQL daemon start/stop script.
# Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
# When this is done the mysql server will be started when the machine is
# started and shut down when the systems goes down.
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine.
# Comments to support LSB init script conventions
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop MySQL
# Description: MySQL is a very fast and reliable SQL database engine.
### END INIT INFO
 
 
这里在网上看到的一篇文档:
 
像我一样的菜鸟们,希望你们可以不被系统服务自启动问题,难住,请高手指正我的错误
最近一直在弄apache服务器,好辛苦啊,参看了/etc/rc.d/init.d/下其它的服务启动脚本以及和rc0~6.d目录之下的符号连接,终于有点明白chkconfig的工作原理,
apache这个问题其实很简单的(不知道的时候,好难),你只要把在安装路径下的bin目录下的apachectl文件复制到 /etc/rc.d/init.d/目录下,用文本编辑器打开他,在文件首部#!/bin/bash行下,加入以下几行
# chkconfig: 2345 50 40
# description This is  Internet www Server
说明一下,description是描述这个服务用的,一定要写上对服务的描述,而且不可以是中文的,
chkconfig: 第一组数字是系统运行级2345表示的是将要设为启动的系统运行级别, 第二个数字是优先级,00优先级最高,当然考虑到依赖性,你的服务的优先级不宜过高,如果,比自己依赖的服务的优先级更高,那么您的服务将无法正常启动,第三组数字就是杀死服务的优先级
您还可以用以下方法设置它将覆盖以上两句的设置
### BEGIN INIT INFO
# Provides: 服务名
# Required-Start: $local_fs $network (依赖的服务用空格隔开,$加上服务名,要求先启动的服务)
# Required-Stop: $local_fs $network (依赖的服务用空格隔开,$加上服务名,要求先停止的服务)
# Default-Start: 2 3 4 5 (要启动该服务的运行级别)
# Default-Stop: 0 1 6(这个不用说了吧)
# Short-Description: 简单描述一下服务(英文)
# Description: 描述一下服务(英文)(这里不覆盖在chkconfig下的description)
### END INIT INFO
保存退出,在GUI的服务配置中就可以看到该服务的条目了,右边出现该服务的描述
接着就可以chkconfig -add 服务,就可以看到你设置的那些级别可以自动启动服务了,或是chkconfig -level 级别 服务名。