linux设定自启动服务(oracle为例)

来源:互联网 发布:割平面法求解凸优化 编辑:程序博客网 时间:2024/05/17 06:06

1.首先修改/etc/oratab文件
#vi /etc/oratab
找到orcl=/u01/app/oracle/product/11.1.0/db_1:N这一行
改为:
orcl=/u01/app/oracle/product/11.1.0/db_1:Y  (注意是大写)
也就是将最后的N改为Y,意思是将不允许自动启动改为允许自动启动。

2.修改ORACLE自带的启动与关闭脚本

分别是dbstart和 dbshut。执行这两个脚本就可以实现ORACLE脚本的启动与关闭。在oracle账户下修改$ORACLE_HOME/bin/dbstart文件
#su -oracle 
$cd $ORACLE_HOME/bin
$vi dbstart
找到ORACLE_HOME_LISTNER=$1这一行
改为:ORACLE_HOME_LISTNER=$ORACLE_HOME
之所以做这一步,是因为在这个脚本自动生成的时候,也就是ORACLE被安装进RHEL的时候,这个脚本并不知道你的ORACLE_HOME_LISTNER是什么,现在要将这个参数显示的写明,这样就不会在执行这个脚本的时候报ORACLE_HOME_LISTNER没有被指定的错误了。注意:dbstart和dbshut脚本在10g之后就已经将监听器的启动与关闭合并进数据库实例的启动与关闭脚本里面了。而不再是单独分开的了。
同样的方式,我们也要修改dbshut的这个参数。这里就不再详细写出了,他们在同一个目录下。

3 脚本

# !/bin/sh# chkconfig: 345 61 61# description: Oracle 11g AutoRun Services# /etc/init.d/oracle## Run-level Startup script. for the Oracle Instance, Listener, and# Web Interfaceexport ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1export ORACLE_SID=ORCLexport PATH=$PATH:$ORACLE_HOME/binORA_OWNR="oracle"# if the executables do not exist -- display errorif [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]then     echo "Oracle startup: cannot start"     exit 1fi# depending on parameter -- startup, shutdown, restart# of the instance and listener or usage displaycase "$1" instart)     # Oracle listener and instance startup     su $ORA_OWNR -lc $ORACLE_HOME/bin/dbstart     touch /var/lock/subsys/oracle11     su $ORA_OWNR -lc "$ORACLE_HOME/bin/emctl start dbconsole"     echo "Oracle Start Succesful!OK."     ;;stop)     # Oracle listener and instance shutdown     su $ORA_OWNR -lc "$ORACLE_HOME/bin/emctl stop dbconsole"     su $ORA_OWNR -lc $ORACLE_HOME/bin/dbshut     rm -f /var/lock/subsys/oracle11     echo "Oracle Stop Succesful!OK."     ;;reload|restart)     $0 stop     $0 start     ;;*)     echo $"Usage: `basename $0` {start|stop|reload|reload}"     exit 1esacexit 0

保存并退出。
这段脚本的关键解释:
第一:#chkconfig:345 99 10虽是一行注释,但是确实关键的必不可少的一行,除非你不用chkconfig命令来自动生成符号连接文件,而是完全采用手工创建。否则没有这一行,执行chkconfig系统将会报出oracle11没有chkconfig服务权限的错误。
第二:su oracle -c $ORACLE_HOME/bin/dbstart和touch /var/lock/subsys/oracle11这两行的作用是首先执行dbstart脚本启动oracle,然后在服务活动列表目录中创建一个与oracle11这个服务同名的一个文件,表示这个服务是活动的,也就是被启动的。而su oracle -c $ORACLE_HOME/bin/dbshut和rm -f /var/lock/subsys/oracle11这两行的作用是首先执行dbshut急哦脚本关闭oracle,然后从服务活动列表目录中删除那个与oracle11同名的那个文件,表示这个服务不是活动的,也就是已经被关闭。

那么为什么要做touch /var/lock/subsys/oracle11和rm -f /var/lock/subsys/oracle11这两步呢?原因是跟LINUX系统的机制有关的:LINUX的判别一个服务是否被启动的依据是在/var/lock/subsys/目录下是否与服同名的文件,若有则表示这个服务已经被启动了,在系统关闭的时候,LINUX会把这里面列出的服务全部关闭,并删掉与服务同名的文件。若一个服务被启动了,但却在这个目录里没有那个服务的同名文件,则不会关闭那个服务。网上的文章均将这个地方设置错了,所以会发现,ORACLE可以随系统启动了,但却没有随系统关闭。我也是分析了/etc/rc.d/rc.local后才发现这个原理的。经过试验,果然如此。再分析mysql的启动与关闭脚本也是这样做的,最终恍然大悟
原来如此。这个地方请大家注意了。

4.将这个脚本注册成为一个系统服务
先给脚本分配可以被执行的权限。

执行下面命令:

#su-root

chown oracle /etc/init.d/oracle11

chmod 775 /etc/init.d/oracle11

加入系统服务方法有二

第一种:手动创建符号链接文件

 chkconfig --add oracle          // 添加到服务里 

 chkconfig --level 345 oracle11 on   (参数--level 为两个"-" ,下同)

再创建符号链接文件

 ln -s /etc/init.d/oracle /etc/rc1.d/K61oracle11

 ln -s /etc/init.d/oracle /etc/rc3.d/S61oracle11

第二种:自动创建符号链接

chkconfig --add /etc/init.d/oracle11

执行这个命令就需要你在脚本中写上#chkconfig:3459910了。这样当这个命令被执行的时候,回去oracle11文件中寻找这行注释,并解析这行注释,根据解析结果分别在/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc/rc.d/rc5.d中创建符号连接文件S99oracle11文件,这个文件是系统启动时要执行的,其实这个文件是指向/etc/init.d/oracle11的,启动的时候系统向这个文件发送一个start参数,也就执行了oracle11文件中的start分支了。还会在/etc/rc.d/rc0.d;/etc/rc.d /rc1.d;/etc/rc.d/rc6.d中创建K10oracle11文件,这个文件时系统关闭时要执行的,其实这个文件也是指向/etc /init.d/oracle11的,关闭的时候系统向这个文件发送一个stop参数,也就执行了oracle11文件中的stop分支了。
我想你应该明白#chkconfig:3459910中这些数字的含义了吧:指出3,4,5级别启动这个服务,99是在相应的/etc /rc.d/rcN.d(N为前面指定的级别,这里是2345)目录下生成的链接文件的序号(启动优先级别)S99oracle11,10为在除前面指出的级别对应的/etc/rc.d/rcN.d(N为除2345之外的级别)目录生成的链接文件的序号(服务停止的优先级别)K10oracle11。至于为什么在这些目录中创建文件和文件的命名规则,这就要您对LINUX的系统启动流程有一个熟悉的了解了,在这就不详谈了。

注意:如果chkconfig --add xxx 添加不上符号链接,可能是原先的服务已经存在,用 chkconfig --list xxx 查一下,如果存在就先del,然后再 --add就行了。
两种方法效果一样

五、测试脚本是否正常

如果想稳妥,可以测试一下脚本是否能够启动服务

启动,运行命令:./oracle11 start
关闭,执行命令:./oracle11 stop



0 0
原创粉丝点击