linux 下 service 命令解析

2021-08-20 00:03:31 字數 1500 閱讀 9765

我們平時都會用

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...

android 除錯命令service

在android中,可以利用service命令去做很多除錯工作,例如service list命令顯示系統當前所有在service manager註冊的service,其命令具體使用如下,service service usage service h service list service chec...

Service類的命令

service命令是redhat linux相容的發行版中用來控制系統服務的實用工具,它以啟動 停止 重新啟動和關閉系統服務,還可以顯示所有系統服務的當前狀態。service 服務名 引數 服務名 服務的名稱 引數 statu 狀態 stop 關閉 start 開始 h 顯示幫助資訊 status ...