~upstart-devel/upstart/upstart-jobs

« back to all changes in this revision

Viewing changes to vivid/etc/init.d/gridftpd

  • Committer: Dimitri John Ledkov
  • Date: 2014-11-19 12:58:41 UTC
  • Revision ID: dimitri.j.ledkov@intel.com-20141119125841-98dr37roy8dvcv3b
auto update

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/bash
 
2
#
 
3
# Init file for the ARC gridftp server
 
4
#
 
5
# chkconfig: 2345 75 25
 
6
# description: ARC gridftpd
 
7
#
 
8
# config: /etc/sysconfig/nordugrid
 
9
# config: /etc/sysconfig/gridftpd
 
10
# config: /usr/etc/arc.conf
 
11
# config: /etc/arc.conf
 
12
 
 
13
### BEGIN INIT INFO
 
14
# Provides:          gridftpd
 
15
# Required-Start:    $local_fs $remote_fs
 
16
# Required-Stop:     $local_fs $remote_fs
 
17
# Default-Start:     2 3 4 5
 
18
# Default-Stop:      0 1 6
 
19
# Short-Description: ARC gridftpd
 
20
# Description:       ARC gridftp server
 
21
### END INIT INFO
 
22
 
 
23
# source function library
 
24
if [ -f /etc/init.d/functions ]; then
 
25
    . /etc/init.d/functions
 
26
    log_success_msg() {
 
27
        echo -n "$@"
 
28
        success "$@"
 
29
        echo
 
30
    }
 
31
    log_warning_msg() {
 
32
        echo -n "$@"
 
33
        warning "$@"
 
34
        echo
 
35
    }
 
36
    log_failure_msg() {
 
37
        echo -n "$@"
 
38
        failure "$@"
 
39
        echo
 
40
    }
 
41
elif [ -f /lib/lsb/init-functions ]; then
 
42
    . /lib/lsb/init-functions
 
43
else
 
44
    echo "Error: Cannot source neither init.d nor lsb functions"
 
45
    exit 1
 
46
fi
 
47
 
 
48
add_library_path() {
 
49
    location="$1"
 
50
    if [ ! "x$location" = "x" ] ; then
 
51
        if [ ! "$location" = "/usr" ] ; then
 
52
            libdir="$location/lib"
 
53
            libdir64="$location/lib64"
 
54
            if [ -d "$libdir64" ] ; then
 
55
                if [ "x$LD_LIBRARY_PATH" = "x" ]; then
 
56
                    LD_LIBRARY_PATH="$libdir64"
 
57
                else
 
58
                    LD_LIBRARY_PATH="$libdir64:$LD_LIBRARY_PATH"
 
59
                fi
 
60
            fi
 
61
            if [ -d "$libdir" ] ; then
 
62
                if [ "x$LD_LIBRARY_PATH" = "x" ]; then
 
63
                    LD_LIBRARY_PATH="$libdir"
 
64
                else
 
65
                    LD_LIBRARY_PATH="$libdir:$LD_LIBRARY_PATH"
 
66
                fi
 
67
            fi
 
68
        fi
 
69
    fi
 
70
}
 
71
 
 
72
prog=gridftpd
 
73
RUN=yes
 
74
 
 
75
# sysconfig files
 
76
if [ -r /etc/sysconfig/nordugrid ]; then
 
77
    . /etc/sysconfig/nordugrid
 
78
elif [ -r /etc/default/nordugrid ]; then
 
79
    . /etc/default/nordugrid
 
80
fi
 
81
if [ -r /etc/sysconfig/${prog} ]; then
 
82
    . /etc/sysconfig/${prog}
 
83
elif [ -r /etc/default/${prog} ]; then
 
84
    . /etc/default/${prog}
 
85
fi
 
86
 
 
87
if [ "$RUN" != "yes" ] ; then
 
88
    log_warning_msg "$prog disabled, please adjust the configuration to your"
 
89
    log_warning_msg "needs and then set RUN to 'yes' in /etc/default/$prog to enable it."
 
90
    exit 0
 
91
fi
 
92
 
 
93
# GLOBUS_LOCATION
 
94
GLOBUS_LOCATION=${GLOBUS_LOCATION:-/usr}
 
95
if [ ! -d "$GLOBUS_LOCATION" ]; then
 
96
    log_failure_msg "GLOBUS_LOCATION ($GLOBUS_LOCATION) not found"
 
97
    exit 1
 
98
fi
 
99
export GLOBUS_LOCATION
 
100
 
 
101
# ARC_LOCATION
 
102
ARC_LOCATION=${ARC_LOCATION:-/usr}
 
103
if [ ! -d "$ARC_LOCATION" ]; then
 
104
    log_failure_msg "ARC_LOCATION ($ARC_LOCATION) not found"
 
105
    exit 1
 
106
fi
 
107
export ARC_LOCATION
 
108
 
 
109
readconfigvar() {
 
110
    fname=$1
 
111
    if [ ! -r "$fname" ]; then
 
112
        return
 
113
    fi
 
114
    bname="[$2]"
 
115
    vname=$3
 
116
    value=
 
117
    cat "$fname" | grep -e '^\[' -e "^${vname}=" | {
 
118
        while true; do
 
119
            read line
 
120
            if [ ! $? = 0 ] ; then
 
121
                return
 
122
            fi
 
123
            if [ "$line" = "$bname" ] ; then
 
124
                while true ; do
 
125
                    read line
 
126
                    if [ ! $? = 0 ] ; then
 
127
                        return
 
128
                    fi
 
129
                    lstart=`echo "$line" | head -c 1`
 
130
                    if [ "$lstart" = '[' ] ; then
 
131
                        return
 
132
                    fi
 
133
                    vlname=`echo "$line" | sed 's/=.*//;t;s/.*//'`
 
134
                    if [ "$vlname" = "$vname" ] ; then
 
135
                        val=`echo "$line" | sed 's/[^=]*=//'`
 
136
                        eval "echo $val"
 
137
                        return
 
138
                    fi
 
139
                done
 
140
            fi
 
141
        done
 
142
    }
 
143
}
 
144
 
 
145
check_cert() {
 
146
  X509_USER_CERT=`readconfigvar "$ARC_CONFIG" gridftpd x509_user_cert`
 
147
  X509_USER_KEY=`readconfigvar "$ARC_CONFIG" gridftpd x509_user_key`
 
148
  if [ -z "$X509_USER_CERT" ] ; then
 
149
    X509_USER_CERT=`readconfigvar "$ARC_CONFIG" common x509_user_cert`
 
150
  fi
 
151
  if [ -z "$X509_USER_KEY" ] ; then
 
152
    X509_USER_KEY=`readconfigvar "$ARC_CONFIG" common x509_user_key`
 
153
  fi
 
154
  if [ -z "$X509_USER_CERT" ] ; then
 
155
    X509_USER_CERT=/etc/grid-security/hostcert.pem
 
156
  fi
 
157
  if [ -z "$X509_USER_KEY" ] ; then
 
158
    X509_USER_KEY=/etc/grid-security/hostkey.pem
 
159
  fi
 
160
  if [ ! -f "$X509_USER_CERT" ] ; then
 
161
    log_failure_msg "Host certificate not found"
 
162
    exit 1
 
163
  fi
 
164
  if [ ! -f "$X509_USER_KEY" ] ; then
 
165
    log_failure_msg "Host key not found"
 
166
    exit 1
 
167
  fi
 
168
  # check permissions on key
 
169
  perms=`stat -L -c %a "$X509_USER_KEY"`
 
170
  if [ "$perms" != "600" ] && [ "$perms" != "400" ] ; then
 
171
    log_failure_msg "Host key must be readable only by user"
 
172
    exit 1
 
173
  fi
 
174
}
 
175
 
 
176
CMD="$ARC_LOCATION/sbin/$prog"
 
177
if [ ! -x "$CMD" ]; then
 
178
    log_failure_msg "Missing executable"
 
179
    exit 1
 
180
fi
 
181
 
 
182
# ARC_CONFIG
 
183
if [ "x$ARC_CONFIG" = "x" ]; then
 
184
    if [ -r $ARC_LOCATION/etc/arc.conf ]; then
 
185
        ARC_CONFIG=$ARC_LOCATION/etc/arc.conf
 
186
    elif [ -r /etc/arc.conf ]; then
 
187
        ARC_CONFIG=/etc/arc.conf
 
188
    fi
 
189
fi
 
190
 
 
191
if [ ! -r "$ARC_CONFIG" ]; then
 
192
    log_failure_msg "ARC configuration not found (usually /etc/arc.conf)"
 
193
    exit 1
 
194
fi
 
195
 
 
196
CMD="$CMD -c '$ARC_CONFIG'"
 
197
 
 
198
# VOMS_LOCATION
 
199
VOMS_LOCATION=${VOMS_LOCATION:-@DEFAULT_VOMS_LOCATION@}
 
200
 
 
201
# GRIDSITE_LOCATION
 
202
GRIDSITE_LOCATION=${GRIDSITE_LOCATION:-@DEFAULT_GRIDSITE_LOCATION@}
 
203
 
 
204
add_library_path "$LFC_LOCATION"
 
205
add_library_path "$GRIDSITE_LOCATION"
 
206
add_library_path "$VOMS_LOCATION"
 
207
add_library_path "$GLOBUS_LOCATION"
 
208
if [ "x$LD_LIBRARY_PATH" = "x" ]; then
 
209
    LD_LIBRARY_PATH=$ARC_LOCATION/lib
 
210
else
 
211
    LD_LIBRARY_PATH=$ARC_LOCATION/lib:$LD_LIBRARY_PATH
 
212
fi
 
213
export LD_LIBRARY_PATH
 
214
 
 
215
PID_FILE=`readconfigvar "$ARC_CONFIG" gridftpd pidfile`
 
216
 
 
217
if [ `id -u` = 0 ] ; then
 
218
    # Debian does not have /var/lock/subsys
 
219
    if [ -d /var/lock/subsys ]; then
 
220
        LOCKFILE=/var/lock/subsys/$prog
 
221
    else
 
222
        LOCKFILE=/var/lock/$prog
 
223
    fi
 
224
    if [ "x$PID_FILE" = "x" ]; then
 
225
        PID_FILE=/var/run/$prog.pid
 
226
    fi
 
227
else
 
228
    LOCKFILE=$HOME/$prog.lock
 
229
    if [ "x$PID_FILE" = "x" ]; then
 
230
        PID_FILE=$HOME/$prog.pid
 
231
    fi
 
232
fi
 
233
 
 
234
logfile=`readconfigvar "$ARC_CONFIG" gridftpd logfile`
 
235
if [ "x$logfile" = "x" ]; then
 
236
    logfile=/var/log/arc/gridftpd.log
 
237
fi
 
238
if [ ! -d `dirname $logfile` ]; then
 
239
    mkdir -p `dirname $logfile`
 
240
fi
 
241
 
 
242
CMD="$CMD -P '$PID_FILE'"
 
243
 
 
244
start() {
 
245
    check_cert
 
246
 
 
247
    echo -n "Starting $prog: "
 
248
 
 
249
    # Check if we are already running
 
250
    if [ -f $PID_FILE ]; then
 
251
        read pid < $PID_FILE
 
252
        if [ "x$pid" != "x" ]; then
 
253
            ps -p "$pid" -o comm 2>/dev/null | grep "^$prog$" 1>/dev/null 2>/dev/null
 
254
            if [ $? -eq 0 ] ; then
 
255
                log_success_msg "already running (pid $pid)"
 
256
                return 0
 
257
            fi
 
258
        fi
 
259
        rm -f "$PID_FILE" "$LOCKFILE"
 
260
    fi
 
261
 
 
262
    eval "$CMD"
 
263
    RETVAL=$?
 
264
 
 
265
    if [ $RETVAL -eq 0 ]; then
 
266
        touch $LOCKFILE
 
267
        log_success_msg
 
268
    else
 
269
        log_failure_msg
 
270
    fi
 
271
    return $RETVAL
 
272
}
 
273
 
 
274
stop() {
 
275
    echo -n "Stopping $prog: "
 
276
 
 
277
    if [ -f "$PID_FILE" ]; then
 
278
        read pid < "$PID_FILE"
 
279
        if [ ! -z "$pid" ] ; then
 
280
            kill "$pid"
 
281
            RETVAL=$?
 
282
            if [ $RETVAL -eq 0 ]; then
 
283
                log_success_msg
 
284
            else
 
285
                log_failure_msg
 
286
            fi
 
287
 
 
288
            sleep 1
 
289
            kill -9 "$pid" 1>/dev/null 2>&1
 
290
            rm -f "$PID_FILE" "$LOCKFILE"
 
291
        else
 
292
            RETVAL=1
 
293
            log_failure_msg "$prog shutdown - pidfile is empty"
 
294
        fi
 
295
    else
 
296
        RETVAL=0
 
297
        log_success_msg "$prog shutdown - already stopped"
 
298
    fi
 
299
    return $RETVAL
 
300
}
 
301
 
 
302
status() {
 
303
    if [ -f "$PID_FILE" ]; then
 
304
        read pid < "$PID_FILE"
 
305
        if [ "$pid" != "" ]; then
 
306
            if ps -p "$pid" > /dev/null; then
 
307
                echo "$1 (pid $pid) is running..."
 
308
                return 0
 
309
            fi
 
310
            echo "$1 stopped but pid file exists"
 
311
            return 1
 
312
        fi
 
313
    fi
 
314
    if [ -f $LOCKFILE ]; then
 
315
        echo "$1 stopped but lockfile exists"
 
316
        return 2
 
317
    fi
 
318
    echo "$1 is stopped"
 
319
    return 3
 
320
}
 
321
 
 
322
restart() {
 
323
    stop
 
324
    start
 
325
}
 
326
 
 
327
case "$1" in
 
328
    start)
 
329
        start
 
330
        ;;
 
331
    stop)
 
332
        stop
 
333
        ;;
 
334
    status)
 
335
        status $prog
 
336
        ;;
 
337
    restart | force-reload)
 
338
        restart
 
339
        ;;
 
340
    reload)
 
341
        ;;
 
342
    condrestart | try-restart)
 
343
        [ -f $LOCKFILE ] && restart || :
 
344
        ;;
 
345
    *)
 
346
        echo "Usage: $0 {start|stop|status|restart|force-reload|reload|condrestart|try-restart}"
 
347
        exit 1
 
348
        ;;
 
349
esac
 
350
 
 
351
exit $?