linux有自己一套完整的启动体系, 各种版本的linux几乎都包括rc[0-6].d启动配置目录。
linux的启动
init是所有进程的顶层
init读取/etc/inittab,执行rc.sysinit脚本
rc.sysinit根据inittab执行rc[0-6].d脚本
rc.d
所有启动脚本放置在 /etc/rc.d/init.d下
rc[0-6].d中放置的是init.d中脚本的链接,命名格式是:
S{number}{name}
K{number}{name}
S开始的文件向脚本传递start参数
K开始的文件向脚本传递stop参数
number决定执行的顺序
启动脚本格式
#!/bin/sh
# chkconfig: 2345 08 92
# description: Starts, stops and saves
case "$1" in
start)
do start-thing;
;;
stop)
do stop-thing;
;;
restart)
do restart-thing;
;;
rc.local
在rc.local添加的命令,会在开机启动时执行。经常使用的 rc.local 则完全是习惯问题,不是标准。
bash启动脚本
/etc/profile : 在启动一个交互登陆shell的时候被调用。
/etc/bashrc : 在一个交互的非登陆shell启动的时候被调用。
~/.bash_profile : 在启动一个交互登陆shell的时候被调用。
~/.bashrc : 在一个交互的非登陆shell启动的时候被调用。
上面列举的都是是bash的启动脚本.
一般用来设置单用户的启动环境,也可以实现开机单用户的程序,但要明确他们都是属于bash范畴而不是系统范畴。
开机程序的自动启动
系统脚本可以放置在/etc/rc.d/init.d中并建立/etc/rc.d/rc[0-6].d链接,也可以直接放置在/etc/rc.d/rc.local中。
init.d脚本包含完整的start,stop,status,reload等参数,是标准做法,推荐使用。
为特定用户使用的程序(如有的用户需要使用中文输入法而有的不需要)放置在~/中的bash启动脚本中。
linux 运行级别
运行级别就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。这些级别在/etc/inittab文件里指定。这个文件是init程序寻找的主要文件,最先运行的服务是那些放在/etc/rc.d 目录下的文件。
运行级定义如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
对各个运行级的详细解释:
0 为停机,机器关闭。
1 为单用户模式,就像Win9x下的安全模式类似。
2 为多用户模式,但是没有NFS支持。
3 为完整的多用户模式,是标准的运行级。
4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本 电脑的电池用尽时,可以切换到
这个模式来做一些设置。
5 就是X11,进到X Window系统了。
6 为重启,运行init 6机器就会重启。
在/etc/rc.d/rc.local中添加开机启动命令
示例:
vi /etc/rc.local加入如下内容,保存
su - oracle -c '$ORACLE_HOME/bin/lsnrctl start'
su - oracle -c '$ORACLE_HOME/bin/sqlplus "/as sysdba" @/StartOracle.sql'
/opt/tomcat/bin/stratup.sh
添加开机启动service脚本
主要用三种方式进行这一操作:
ln -s 在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0~6七个运行级别之一)
chkonfig 命令行运行级别设置
ntsysv 伪图形运行级别设置
第一种方式:ln -s 建立启动软连接
在/etc/init.d创建service脚本, 格式参考启动脚本格式。
K开头的脚本文件代表运行级别加载时需要关闭的,S开头的代表需要执行
ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
此处sshd是具体服务的脚本文件,S100ssh是其软链接,S开头代表加载时自启动。
如果需要在多个运行级别下设置自启动,则需建立多个软链接。
这样一来我们便可以通过service sshd start 来启动服务。
这种方式比较繁琐,适用于自定义的服务脚本。
如果系统中已经存在某些服务(比如安装apache时就会有httpd服务项),可以使用下面的两种方式。
第二种方式:chkconfig
如果需要自启动某些服务,只需使用chkconfig 服务名 on即可,若想关闭,将on改为off
在默认情况下,chkconfig会自启动2345这四个级别,如果想自定义可以加上–level选项
上面我们先将sshd服务的所有启动级别关闭,然后使用–level选项启动自定义级别。
使用chkconfig –add可以添加自有服务。这样一来我们便可以通过service sshd start 来启动服务。
第三种方式:ntsysv
略
示例:
tomcat service 启动脚本
#!/bin/sh
#chkconfig: 2345 81 06
#description: tomcat7d
tomcat7Dir=/home/cup/content-web/apache-tomcat-7.0.50
checkRun() {
psCount=`ps -ef|grep $tomcat7Dir|wc -l`
# echo $psCount
if [ "${psCount}" = "2" ]; then
echo -n "tomcat7 dir: $tomcat7Dir is running "
echo -e "[ \033[32;1mOK\033[0m ]"
else
echo -n "tomcat7 dir: $tomcat7Dir not run "
echo -e "[ \033[31;1mFAILURE\033[0m ]"
fi
}
case "$1" in
start)
cd $tomcat7Dir
$tomcat7Dir/bin/startup.sh
echo -n "tomcat7 startup: "
checkRun
;;
stop)
cd $tomcat7Dir
$tomcat7Dir/bin/shutdown.sh
echo -n "tomcat7 shutdown: "
checkRun
;;
restart)
cd $tomcat7Dir
$tomcat7Dir/bin/shutdown.sh
sleep 5s
echo "tomcat7 stop...."
sleep 5s
$tomcat7Dir/bin/startup.sh
echo "tomcat7 start..."
echo -n "tomcat7Dir $tomcat7Dir tomcat7 restart: "
checkRun
;;
status)
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep $tomcat7Dir
checkRun
;;
*)
echo "service tomcat7d start|stop|restart|status"
;;
esac
nginx 启动简要脚本:
#!/bin/sh
#chkconfig: 2345 80 05
#description: nginx
ngnixBin=/usr/local/nginx/sbin/nginx
case $1 in
start)
$ngnixBin
echo "nginx startup"
;;
stop)
$ngnixBin -s stop
echo "nginx stop"
;;
restart)
$ngnixBin -s reload
echo "nginx reload"
;;
status)
echo "ngnix bin file: $ngnixBin"
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'
;;
*)
echo "service nginxd start|stop|restart"
;;
esac