所谓运行级别脚本,就是启动/关闭自定义服务(应用)的脚本,相当于windows下某个应用的启动程序文件(.exe文件)。也可以理解这种脚本就是一个启动应用的脚本。
运行级别脚本的结构
1. 首先要以注释的方式声明服务默认启动的运行级别列表,以及系统在启动、关闭该服务时的优先级;说明之后一般有三种方式去实现:
(1)可以通过在inittab中添加一项,来确定在系统启动时,必须执行自己定义的脚本
xx.sh:12345:once:path > /dev/null 2>&1
(2)可以在运行级别中目录[/etc/rc.d/rc3.d]中添加脚本连接文件 --最好方式
(3)在/etc/rc.d/rc.local(SUSE下是boot.local)文件中添加shell_patharg命令来执行
2. 将对服务的启动、关闭等操作都卸载函数中
3. 用case语句处理传入脚本的参数。
4. 如果要检测服务是否处于运行状态,最好创建运行标记文件。
某产品运行级别脚本示例
#!/bin/bash
#chkconfig:3 4 5 80 10
#This is a test service!
function usage()
{
echo "Usage: $0 <start|stop|restart|reload>"
return 0
}
function start()
{
echo "Starting $0:"
#这里还以添加其他要启动和运行的脚本
return 0
}
function Stop()
{
echo "Stopping $0:"
#这里可以添加其他要停止运行的脚本
return 0
}
case $1 in
start)
start
;;
Stop)
Stop
;;
stop)
Stop
;;
reload|restart)
Stop
start
;;
*)
usage
exit 1
esac
exit 0
添加和管理启动脚本
关于设置自定义服务的运行级别等方法,可以使用前面说过的chkconfig命令实现
(详见:http://blog.csdn.net/victory_xing126/article/details/50363557)
简单的说:
1. 先将自定义启动脚本拷贝到/etc/init.d文件夹下:
cp service_script.sh /etc/init.d/
2. 添加启动脚本到系统服务自启列表中:
# chkconfig -add service_script.sh
insserv: warning: script'service_script.sh' missing LSB tags
insserv: warning: script'service_script.sh' missing LSB tags
insserv: Default-Start undefined, assumingdefault start runlevel(s) for script `service_script.sh'
service_script.sh 0:off 1:off 2:off 3:on 4:off 5:on 6:off
之后就可以使用chkconfig命令统一管理自定义脚本了:
#chkconfig -l|grep service_s
service_script.sh 0:off 1:off 2:off 3:on 4:off 5:on 6:off
Shell脚本安全性
如果脚本中出现目录切换、修改环境变量之类的命令,则可能为系统留下安全隐患,为此Shell提供了一种受限模式:当脚本中出现类似上述的命令,Bash会拒绝执行。
通过在脚本的第一行加上r选项来开启该模式:
#!/bin/bash -r
或者在脚本第二行中加入:
set -r
也能使脚本进入受限模式。
*set命令还有一个选项(x)可以使脚本进入调试模式,可以针对某一段使用set -x、set +x进入/退出调试模式。