我們平時都會用service *** 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"$
" >&2
exit 1fi
……一些引數條件判斷
if [ -f "
$/$" ]; then
env -i path="
$path
" term="
$term""
$/$"
$else
echo $"
$: unrecognized service
" >&2
exit
1fi
其實這個指令碼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" "$/$" $
相當於執行了如下命令
/etc/init.d/mysqld restart
類似的,如果你的執行命令為service mysqld stop start,那麼就相當於執行了
/etc/init.d/mysqld stop start
至於命令執行成不成功,就看你指令碼支不支援多個引數的呼叫。
linux service命令解析
我們平時都會用service start來啟動某個程序,那麼它背後究竟執行了什麼?其實service的絕對路徑為 sbin service 開啟這個檔案cat sbin service,我們會發現其實它就是乙個很普通的shell指令碼 root zejin240 cat sbin service b...
linux service命令解析
我們平時都會用service start來啟動某個程序,那麼它背後究竟執行了什麼?其實service的絕對路徑為 sbin service 開啟這個檔案cat sbin service,我們會發現其實它就是乙個很普通的shell指令碼 root zejin240 cat sbin service b...
linux service命令解析(重要)
我們平時都會用service start來啟動某個程序,那麼它背後究竟執行了什麼?其實service的絕對路徑為 sbin service 開啟這個檔案cat sbin service,我們會發現其實它就是乙個很普通的shell指令碼 root zejin240 cat sbin service b...