我們平時都會用
service xxx start來啟動某個進程,那么它背后究竟執行了什么?
其實service的絕對路徑為/sbin/service ,打開這個文件cat /sbin/service,我們會發現其實它就是一個很
普通的shell腳本:
[root@zejin240 ~]# cat /sbin/service #!/bin/sh . /etc/init.d/functions VERSION="$(basename $0) ver. 0.91" USAGE="Usage: $(basename $0) < option > | --status-all | \ [ service_name [ command | --full-restart ] ]" SERVICE= SERVICEDIR="/etc/init.d" 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}: unrecognized service" >&2 exit 1 fi
其實這個腳本service主要作了如下兩點:
1.初始化執行環境變量PATH和TERM
PATH=/sbin:/usr/sbin:/bin:/usr/bin
TERM,為顯示外設的值,一般為xterm
2.調用/etc/init.d/文件夾下的相應腳本,腳本的參數為service命令第二個及之后的參數
以service mysqld restart為例
那么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
類似的,如果你的執行命令為service mysqld stop start,那么就相當於執行了
/etc/init.d/mysqld stop start
至於命令執行成不成功,就看你腳本支不支持多個參數的調用。