1#! /bin/sh
2### BEGIN INIT INFO
3# Provides:          pxp-agent
4# Required-Start:    $network $named $remote_fs $syslog
5# Required-Stop:     $network $named $remote_fs $syslog
6# Should-Start:      pxp-agent
7# Default-Start:     2 3 4 5
8# Default-Stop:      0 1 6
9### END INIT INFO
10
11exec=/opt/puppetlabs/puppet/bin/pxp-agent
12prog="pxp-agent"
13desc="PXP agent"
14
15piddir=/var/run/puppetlabs
16pidfile="${piddir}/${prog}.pid"
17logdir=/var/log/puppetlabs
18
19[ -x $exec ] || exit 5
20
21[ -r /etc/default/pxp-agent ] && . /etc/default/pxp-agent
22
23. /lib/lsb/init-functions
24
25reload_pxp_agent() {
26    start-stop-daemon --stop --quiet --signal HUP --pidfile $pidfile --name $prog
27}
28
29start_pxp_agent() {
30    mkdir -p $piddir $logdir
31    start-stop-daemon --start --quiet --pidfile $pidfile --startas $exec -- $PXP_AGENT_OPTIONS
32}
33
34stop_pxp_agent() {
35    start-stop-daemon --stop --retry TERM/10/KILL/5 --quiet --oknodo --pidfile $pidfile --name $prog
36
37    pids=$(pgrep -u `whoami` -x $prog)
38    if [ -n "${pids}" ]; then
39        trap '' TERM
40        pkill -TERM  -u `whoami` -f $exec 2>/dev/null
41        trap TERM
42    fi
43    rm -f "${pidfile}"
44}
45
46restart_pxp_agent() {
47    log_begin_msg "Restarting $desc"
48    stop_pxp_agent
49    start_pxp_agent
50    log_end_msg $?
51}
52
53status_pxp_agent() {
54    if (type status_of_proc > /dev/null 2>&1) ; then
55        status_of_proc -p "${pidfile}" "${exec}" "${prog}"
56    else
57        status_of_proc() {
58            local pidfile daemon name status
59
60            pidfile=
61            OPTIND=1
62            while getopts p: opt ; do
63                case "$opt" in
64                    p)  pidfile="$OPTARG";;
65                esac
66            done
67            shift $(($OPTIND - 1))
68
69            if [ -n "$pidfile" ]; then
70                pidfile="-p $pidfile"
71            fi
72            daemon="$1"
73            name="$2"
74            status="0"
75            pidofproc $pidfile $daemon >/dev/null || status="$?"
76            if [ "$status" = 0 ]; then
77                log_success_msg "$name is running"
78                return 0
79            elif [ "$status" = 4 ]; then
80                log_failure_msg "could not access PID file for $name"
81                return $status
82            else
83                log_failure_msg "$name is not running"
84                return $status
85            fi
86        }
87        status_of_proc -p "${pidfile}" "${exec}"
88    fi
89}
90
91case "$1" in
92    start)
93        log_begin_msg "Starting $desc"
94        start_pxp_agent
95        log_end_msg $?
96    ;;
97    stop)
98        log_begin_msg "Stopping $desc"
99        stop_pxp_agent
100        log_end_msg $?
101    ;;
102    reload)
103        log_begin_msg "Reloading $desc"
104        reload_pxp_agent
105        log_end_msg $?
106    ;;
107    status)
108        status_pxp_agent
109    ;;
110    restart|force-reload)
111        restart_pxp_agent
112    ;;
113    condrestart)
114        if status_pxp_agent >/dev/null 2>&1; then
115            restart_pxp_agent
116        fi
117    ;;
118    *)
119        echo "Usage: $0 {start|stop|status|restart|condrestart}" >&2
120        exit 1
121    ;;
122esac
123