Service 命令详解
平常使用service命令查看各种服务,经常性的遇到各种失败,那么service命令究竟在后台做了什么呢?
通过whereis service寻找到了service所在的位置
/usr/sbin/service发现其是一个shell脚本。
通过cat /usr/sbin/service输出其内容:
#!/bin/bash
一些函数定义
VERSION="$(basename$0) ver. 0.91"
USAGE="Usage:$(basename $0) < option > | --status-all | \
[ service_name [ command | --full-restart ] ]"
SERVICE=
SERVICEDIR="/etc/init.d" #服务所在的目录,也就是说,service只能操作这个目录下的服务。
OPTIONS=
if [ $# -eq 0 ]; then
echo "${USAGE}" >&2
exit 1
fi
……
一些参数条件判断
if [ -f "${SERVICEDIR}/${SERVICE}" ]; then
env -i PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${OPTIONS}
else
echo $"${SERVICE}: unrecognizedservice" >&2
exit 1
fi
分析脚本可以发现:
(1) 变量PATH和TERM
PATH=/sbin:/usr/sbin:/bin:/usr/bin
TERM,显示终端,一般为xterm
(2) 调用/etc/init.d/目录下的相应脚本,没错,是调用这个目录下的相应脚本,也就是说,如果要使用service管理服务,就必须把相应服务的脚本存放在这个目录下即可。
以service mysqldrestart为例
那么mysqld为/etc/init.d/下面的一个可执行文件,我们可以看到
[root@zejin240 chenzejin]# ll/etc/init.d/mysql
-rwxr-xr-x. 1 root root 10815 Jan 14 2014/etc/init.d/mysql
restart为参数,将传递给mysqld脚本
这个命令在service执行到后面最终调用的是:
env -i PATH="$PATH"TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${OPTIONS}
相当于执行了如下命令
/etc/init.d/mysqld restart
类似的,如果你的执行命令为servicemysqld stop start,那么就相当于执行了
/etc/init.d/mysqld stop start
至于命令执行成不成功,就看你脚本支不支持多个参数的调用。
下一篇将介绍init.d目录。