1. 程式人生 > >Linux命令service

Linux命令service

用途說明

service命令用於對系統服務進行管理,比如啟動(start)、停止(stop)、重啟(restart)、檢視狀態(status)等。相關的命令還包括chkconfig、ntsysv等,chkconfig用於檢視、設定服務的執行級別,ntsysv用於直觀方便的設定各個服務是否自動啟動。service命令本身是一個shell指令碼,它在/etc/init.d/目錄查詢指定的服務指令碼,然後呼叫該服務指令碼來完成任務。

看看下面的手冊頁可能更加清楚的瞭解service的內幕:service執行指定服務(稱之為System V初始指令碼)時,把大部分環境變數去掉了,只保留LANG和TERM兩個環境變數,並且把當前路徑置為/,也就是說是在一個可以預測的非常乾淨的環境中執行服務指令碼。這種指令碼儲存在/etc/init.d目錄中,它至少要支援start和stop命令。

man service 寫道

service(8) service(8) NAME service - run a System V init script SYNOPSIS service SCRIPT COMMAND [OPTIONS] service --status-all service --help | -h | --version DESCRIPTION service runs a System V init script in as predictable environment as possible, removing most environment vari- ables and with current working directory set to /. The SCRIPT parameter specifies a System V init script, located in /etc/init.d/SCRIPT. The supported values of COMMAND depend on the invoked script, service passes COMMAND and OPTIONS it to the init script unmodified. All scripts should support at least the start and stop commands. As a special case, if COMMAND is --full-restart, the script is run twice, first with the stop command, then with the start command. service --status-all runs all init scripts, in alphabetical order, with the status command. FILES /etc/init.d The directory containing System V init scripts. ENVIRONMENT LANG, TERM The only environment variables passed to the init scripts. SEE ALSO chkconfig(8), ntsysv(8) Jan 2006 service(8)

常用方式

格式:service <service>

列印指定服務<service>的命令列使用幫助。

格式:service <service> start

啟動指定的系統服務<service>

格式:service <service> stop

停止指定的系統服務<service>

格式:service <service> restart

重新啟動指定的系統服務<service>,即先停止(stop),然後再啟動(start)。

格式:chkconfig --list

檢視系統服務列表,以及每個服務的執行級別。

格式:chkconfig <service> on

設定指定服務<service>開機時自動啟動。

格式:chkconfig <service> off

設定指定服務<service>開機時不自動啟動。

格式:ntsysv

以全螢幕文字介面設定服務開機時是否自動啟動。

使用示例

示例一 網路重啟

當修改了主機名、ip地址等資訊時,經常需要把網路重啟使之生效。

[[email protected] root]# service network 用法:/etc/init.d/network {start|stop|restart|reload|status} [[email protected] root]# service network status 配置裝置: lo eth0 當前的活躍裝置: lo eth0 [[email protected] root]# service network restart 正在關閉介面 eth0:                                        [  確定  ] 關閉環回介面:                                             [  確定  ] 設定網路引數:                                             [  確定  ] 彈出環回介面:                                             [  確定  ] 彈出介面 eth0:                                            [  確定  ] [[email protected] root]#

示例二 重啟MySQL

[[email protected] root]# service mysql mysql: unrecognized service [[email protected] root]# service mysqld 用法:/etc/init.d/mysqld {start|stop|status|condrestart|restart} [[email protected] root]# service mysqld status mysqld (pid 1638) 正在執行... [[email protected] root]# service mysqld restart 停止 MySQL:                                               [  確定  ] 啟動 MySQL:                                               [  確定  ] [[email protected] root]#

示例三 service指令碼原始碼展示

[[email protected] ~]# 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 cd / while [ $# -gt 0 ]; do   case "${1}" in     --help | -h | --h* )        echo "${USAGE}" >&2        exit 0        ;;     --version | -V )        echo "${VERSION}" >&2        exit 0        ;;     *)        if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then           cd ${SERVICEDIR}           for SERVICE in * ; do             case "${SERVICE}" in               functions | halt | killall | single| linuxconf| kudzu)                   ;;               *)                 if ! is_ignored_file "${SERVICE}" \                     && [ -x "${SERVICEDIR}/${SERVICE}" ]; then                   env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" status                 fi                 ;;             esac           done           exit 0        elif [ $# -eq 2 -a "${2}" = "--full-restart" ]; then           SERVICE="${1}"           if [ -x "${SERVICEDIR}/${SERVICE}" ]; then             env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" stop             env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" start             exit $?           fi        elif [ -z "${SERVICE}" ]; then          SERVICE="${1}"        else          OPTIONS="${OPTIONS} ${1}"        fi        shift        ;;    esac done if [ -x "${SERVICEDIR}/${SERVICE}" ]; then    env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "${SERVICEDIR}/${SERVICE}" ${OPTIONS} else    echo $"${SERVICE}: unrecognized service" >&2    exit 1 fi [[email protected] ~]#

示例四 crond服務的原始碼

[[email protected] init.d]# cat /etc/init.d/crond #! /bin/bash # # crond          Start/Stop the cron clock daemon. ## chkconfig: 2345 90 60 # description: cron is a standard UNIX program that runs user-specified \ #              programs at periodic scheduled times. vixie cron adds a \ #              number of features to the basic UNIX cron, including better \ #              security and more powerful configuration options. # processname: crond # config: /etc/crontab # pidfile: /var/run/crond.pid # Source function library. . /etc/init.d/functions . /etc/sysconfig/crond t=${CRON_VALIDATE_MAILRCPTS:-UNSET} [ "$t" != "UNSET" ] && export CRON_VALIDATE_MAILRCPTS="$t"   # See how we were called.    prog="crond" start() {         echo -n $"Starting $prog: "         if [ -e /var/lock/subsys/crond ]; then             if [ -e /var/run/crond.pid ] && [ -e /proc/`cat /var/run/crond.pid` ]; then                 echo -n $"cannot start crond: crond is already running.";                 failure $"cannot start crond: crond already running.";                 echo                 return 1             fi         fi         daemon crond $CRONDARGS         RETVAL=$?         echo         [ $RETVAL -eq 0 ] && touch /var/lock/subsys/crond;         return $RETVAL } stop() {         echo -n $"Stopping $prog: "         if [ ! -e /var/lock/subsys/crond ]; then             echo -n $"cannot stop crond: crond is not running."             failure $"cannot stop crond: crond is not running."             echo             return 1;         fi         killproc crond         RETVAL=$?         echo         [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/crond;         return $RETVAL } rhstatus() {         status crond } restart() {         stop         start } reload() {         echo -n $"Reloading cron daemon configuration: "         killproc crond -HUP         RETVAL=$?         echo         return $RETVAL } case "$1" in   start)         start         ;;   stop)         stop         ;;   restart)         restart         ;;   reload)         reload         ;;   status)         rhstatus         ;;   condrestart)         [ -f /var/lock/subsys/crond ] && restart || :         ;;   *)         echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"         exit 1 esac [roo[email protected] init.d]#