RHEL/CentOS 용 System V service init scripts 작성하기

Sample script

RHEL/CentOS 6의 경우 /usr/share/doc/initscripts-9.03.40/sysvinitfiles 에서 샘플 스크립트와 문서를 찾을 수 있다.

#!/bin/bash
#
#   /etc/rc.d/init.d/<servicename>
#
#   <description of the *service*>
#   <any general comments about this init script>
#
# <tags -- see below for tag definitions.  *Every line* from the top
#  of the file to the end of the tags section must begin with a #
#  character.  After the tags section, there should be a blank line.
#  This keeps normal comments in the rest of the file from being
#  mistaken for tags, should they happen to fit the pattern.>
# Source function library.
. /etc/init.d/functions

<define any local shell functions used by the code that follows>

start() {
    echo -n "Starting <servicename>: "
    <start daemons, perhaps with the daemon function>
    touch /var/lock/subsys/<servicename>
    return <return code of starting daemon>
}
stop() {
    echo -n "Shutting down <servicename>: "
    <stop daemons, perhaps with the killproc function>
    rm -f /var/lock/subsys/<servicename>
    return <return code of stopping daemon>
}

Functions in /etc/init.d/functions

daemon [ --check <name> ] [ --user <username>] [+/-nicelevel] program [arguments] [&]

Starts a daemon, if it is not already running. Does other useful things like keeping the daemon from dumping core if it terminates unexpectedly.

--check <name>:
Check that <name> is running, as opposed to simply the first argument passed to daemon().
--user <username>:
Run command as user <username>

 

killproc program [signal]

Sends a signal to the program; by default it sends a SIGTERM, and if the process doesn't die, it sends a SIGKILL a few seconds later.

It also tries to remove the pidfile, if it finds one.

pidofproc program

Tries to find the pid of a program; checking likely pidfiles, and using the pidof program. Used mainly from within other functions in this file, but also available to scripts.

 

status program

Prints status information. Assumes that the program name is the same as the servicename.

Tags

# chkconfig: <startlevellist> <startpriority> <endpriority>

Required. <startlevellist> is a list of levels in which the service should be started by default.

<startpriority> and <endpriority> are priority numbers. For example:

# chkconfig: 2345 20 80


Read 'man chkconfig' for more information.

Unless there is a VERY GOOD, EXPLICIT reason to the
contrary, the <endpriority> should be equal to
100 - <startpriority>

 

# description: <multi-line description of service>

Required. Several lines of description, continued with '\' characters. The initial comment and following whitespace on the following lines is ignored.

 

# processname:

Optional,

 

# config:

Optional, multiple entries allowed. For each static config file used by the daemon, use a single entry. For example:

# config: /etc/httpd/conf/httpd.conf
# config: /etc/httpd/conf/srm.conf

 

Optionally, if the server will automatically reload the config file if it is changed, you can append the word "autoreload" to the line:

# config: /etc/foobar.conf autoreload

 

# pidfile:

Optional, multiple entries allowed. Use just like the config entry, except that it points at pidfiles. It is assumed that the pidfiles are only updated at process creation time, and not later.

The first line of this file should be the ASCII representation of the PID; a terminating newline is optional. Any lines other than the first line are not examined.

 

See Also

 

Ref