linux service命令解析


 
我們平時都會用 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
 
至於命令執行成不成功,就看你腳本支不支持多個參數的調用。
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM