Breadcrumbs

init.d

  • lsb script without lsb

    les scripts lsb sont le standard debian pour les services /etc/init.d mais je rencontre régulierement des problemes avec ces fonctions. Je suis donc régulierement amené à re écrire mes scripts. en Voici un exemple pour avoir une page de monitoring généré pour corosync :

    ce script peut etre améliorer mais il fonctionne correctement contrairement à la version LSB qui faisait planté corosync par moment pour une raison obscure...

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    ! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          skeleton
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Example initscript
    # Description:       This file should be used to construct scripts to be
    #                    placed in /etc/init.d.
    ### END INIT INFO
     
    # Author: Foo Bar <This email address is being protected from spambots. You need JavaScript enabled to view it.>
    #
    # Please remove the "Author" lines above and replace them
    # with your own name if you copy and modify this script.
     
    # Do NOT "set -e"
     
    # PATH should only include /usr/* if it runs after the mountnfs.sh script
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="Lance la generation automatique de la page html de monitoring du cluster Sauron"
    NAME=crm_mon
    DAEMON=/usr/sbin/$NAME
    PIDFILE=/var/run/${NAME}_html.pid
    HTMLPAGE=/apps/www/admin/cluster.html
    DAEMON_ARGS="--daemonize --as-html=$HTMLPAGE --pid-file=$PIDFILE"
    SCRIPTNAME=/etc/init.d/${NAME}_html
     
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
     
    # Read configuration variable file if it is present
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
     
    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh
     
    # Define LSB log_* functions.
    # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
    # and status_of_proc is working.
    . /lib/lsb/init-functions
     
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
            # Return
            #   0 if daemon has been started
            #   1 if daemon was already running
            #   2 if daemon could not be started
            if [ -e "$PIDFILE" ]; then
                    pid=`cat $PIDFILE`
                    if ps -p $pid > /dev/null 2>&1; then
                            echo "Already started"
                            return 1
                    else
                    	    echo "Seems last stop failed, restart process"
                            rm -rf $PIDFILE
                    fi
            fi
            $DAEMON $DAEMON_ARGS || return 2
            echo "$SCRIPTNAME has been started."
            return 0
     
    #       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
    #               || return 1
    #       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
    #               $DAEMON_ARGS \
    #               || return 2
            # Add code here, if necessary, that waits for the process to be ready
            # to handle requests from services started subsequently which depend
            # on this one.  As a last resort, sleep for some time.
    }
     
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
            # Return
            #   0 if daemon has been stopped
            #   1 if daemon was already stopped
            #   2 cant stop daemon
            #start-stop-daemon --stop --quiet --retry=TERM/10/KILL/5 --pidfile $PIDFILE --name $NAME
            if [ -e "$PIDFILE" ]; then
                    kill -9 `cat $PIDFILE`
                    if [ $? -eq 0 ]; then
                            rm -rf $PIDFILE
                            echo "Process stopped"
                            return 0
                    else
                            echo "Failed to kill process, check $PIDFILE"
                            return 2
                    fi
            else
                    echo "Process already stopped"
                    return 1
            fi
    }
     
    #
    # Function that sends a SIGHUP to the daemon/service
    #
    do_reload() {
            #
            # If the daemon can reload its configuration without
            # restarting (for example, when it is sent a SIGHUP),
            # then implement that here.
            #
            echo "not implemented"
            return 0
    }
     
    case "$1" in
      start)
            do_start
            ;;
      stop)
            do_stop
            ;;
      status)
            ps -p `cat $PIDFILE 2> /dev/null` > /dev/null 2>&1 && echo "process is running with pid `cat $PIDFILE`" && exit 0 || echo "process is not running." && exit 3
            ;;
      #reload|force-reload)
            #
            # If do_reload() is not implemented then leave this commented out
            # and leave 'force-reload' as an alias for 'restart'.
            #
            #log_daemon_msg "Reloading $DESC" "$NAME"
            #do_reload
            #log_end_msg $?
            #;;
      restart|force-reload)
            #
            # If the "reload" option is implemented then remove the
            # 'force-reload' alias
            #
            echo "restart..."
            do_stop
            do_start
            exit $?
            ;;
      *)
            #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
            echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
            exit 3
            ;;
    esac