linux自定义服务
oracle开机启动,linux自定义服务,linux开机启动
Linux系统一共有7个运行级别:0-6.其中0是关机、3是多用户有网络模式、5是图形
界面、6是重新启动。系统启动时,在进行一些必要的初始化工作后,就会根据/etc/inittab
里的配置决定运行级别,例如inittab里的配置是id:3:initdefault:,3就说明系统默认的运
行级别是3。系统就会自动去加载/etc/rc.d/rc3.d里面定义的服务。但是系统共有7个运行级
别,而有的服务需要在多个运行级别里都要加载,如果每个服务都在/etc/rc.d/rcN.d里直接
定义的话,就会出现多个副本,不便于维护,所以linux里的服务一般都定义
在/etc/rc.d/init.d里面,而/etc/rc.d/rcN.d里面只维护一个连接。在/etc/rc.d/rcN.d里
面我们会看到两种格式的文件名,一种是以KNN开头的,一种是以SNN开头的,后面的内容就
和/etc/rc.d/init.d定义的服务名相同了。K代表关闭(kill),即系统启动时不启动该服务,S
代表启动(start),NN代表启动顺序,序号越小,越早启动。/etc/rc.d/rcN.d里面的链接文
件可由chkconfig命令自动创建,不需要手动创建,当然也可以手动创建。下面我们创建一服
务,该服务就是在系统启动时向/tmp/myservice.log追加一句话,我们命名为myservice,具
体步骤如下:
#cd /etc/rc.d/init.d
#touch myservice
#chmod u+x myservice
myservice的内容为:
#!/bin/bash
#chkconfig:345 66 33
#descriptioin:this is my service
echo "My service is auto runned at `date`">>/tmp/myservice.log
注意#chkconfig:345 66 33必须有,其中345表示当系统运行在345级别时自动启动该服务,
在其他级别不启动;66表示启动的顺序,33表示关闭顺序,数字越小越早执行。
#description:也必须有,否则我们接下来运行的chkconfig会报错。
然后我们运行
#chkconfig --add myservice
服务到此定义完毕,下次启动时,我们会在/tmp/myservice.log看到一句话:
My service is auto runned at Thu Mar 17 06:02:59 CST 2011
这表明我们的服务在系统启动时被调用了。
让我们看一下 chkconfig --add myservice到底做了什么事情。其实事情的真相很简单,让
我们进入/etc/rc.d/rc3.d
#cd /etc/rc.d/rc3.d ---进入 3,4,5都一样,这代表着我们在myservice文件
#chkconfig:345 66 33 里的345。
#ls *myservice 我们会看到S66myservice,用file命令查看下文件格式,我们会发现它是一
个链接到/etc/rc.d/init.d/myservice 的一个连接文件。正如前面所说,S代表启动。
在进入/etc/rc.d/rc1.d,这里面会有一K66myservice,表示服务在这个级别不启动。
chkconfig做的事情其实就这么简单,我们也可以手动来完成这些事情。本人比较懒,更何况
还有更重要的事情要做,所以就不在详述。
下面,下面,下面我们要做什么呢?。。。
服务在系统启动时是自动加载了,但是它什么时候关闭呢?关闭它时怎么调用呢?
查看/etc/rc.d/rc0.d/S00killall可以发现,系统在关闭时,会去/var/lock/subsys里查找
,如果找到服务名,就会运行下面命令/etc/init.d/servicename stop 这条命令。
所以如果我们希望系统关闭时同样调用我们服务的关闭函数,我们就必须在服务启动时,
在/var/lock/subsys里创建一和我们服务名相同的文件。
修改/etc/rc.d/init.d/myservice如下:
#!/bin/bash
#chkconfig:345 66 33
#descriptioin:this is my service
start()
{
echo "My service is auto runned at `date`">>/tmp/myservice.log
touch /var/lock/subsys/myservice
}
stop()
{
echo "My service is auto stopped at `date`">>/tmp/myservice.log
rm -f /var/lock/subsys/myservice
}
status()
{
echo " What do you want to do"
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart|reload)
stop
start
;;
*)
exit 1
esac
exit 0
很简单,在启动时运行 start 函数,在关闭时运行 stop函数。
然后运行chkconfig myservice reset,再次重新启动后,奇迹发生了。我们
在/tmp/myservice.log中发现了两句话,关闭时的那句话也打印出来了。到此,我们自定义
的服务算是五脏俱全了。
下面我们举一有一点实际意义的例子,在系统开机时自动运行oracle 数据库,在系统关闭前
,自动关闭oracle数据库,步骤如下:
cd /etc/rc.d/init.d
touch oracle
chmod u+x oracle
oracle文件内容如下:
#!/bin/bash
#chkconfig:345 66 66
#description:oracle service
start()
{
su - oracle -c 'lsnrctl start'
su - oracle -c 'sqlplus -s / as sysdba <<EOF
startup;
exit;
EOF'
touch /var/lock/subsys/oracle
}
stop()
{
su - oracle -c 'sqlplus -s / as sysdba <<EOF
shutdown immediate;
exit;
EOF'
su - oracle -c 'lsnrctl stop'
rm -f /var/lock/subsys/oracle
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
exit 1
esac
exit 0
运行chkconfig --add oracle添加oracle服务,这样在开机时oracle 数据库和监听就都会自
动启动了,而且在系统关闭前自动关闭
更多推荐
所有评论(0)