blob: c9db0bb5c21a0070ac115674eafae57b47032edd [file] [log] [blame]
Andrew Geissler89770b02020-06-13 10:40:47 -05001#! /bin/sh
2### BEGIN INIT INFO
3# Provides: gpsd
4# Required-Start: $remote_fs $syslog $network
5# Should-Start: bluetooth dbus udev
6# Required-Stop: $remote_fs $syslog $network
7# Should-Stop:
8# Default-Start: 2 3 4 5
9# Default-Stop: 0 1 6
10# X-Start-Before: ntp
11# Short-Description: GPS (Global Positioning System) daemon start/stop script
12# Description: Start/Stop script for the gpsd service daemon,
13# which is able to monitor one or more GPS devices
14# connected to a host computer, making all data on
15# the location and movements of the sensors available
16# to be queried on TCP port 2947.
17### END INIT INFO
18
19
20# PATH should only include /usr/* if it runs after the mountnfs.sh script
21PATH=/sbin:/usr/sbin:/bin:/usr/bin
22
23DESC="GPS (Global Positioning System) daemon"
24NAME="gpsd"
25DAEMON=/usr/sbin/$NAME
26PIDFILE=/var/run/$NAME.pid
27
28. /etc/init.d/functions || exit 1
29
30# Exit if the package is not installed
31[ -x "$DAEMON" ] || exit 0
32
33# Read configuration variable file if it is present
34[ -r /etc/default/$NAME ] && . /etc/default/$NAME
35
36if [ -z "$GPSD_SOCKET" ] && [ -z "$DEVICES" ]; then
37 GPSD_SOCKET=/var/run/gpsd.sock
38fi
39
40if [ -n "$GPSD_SOCKET" ]; then
41 GPSD_OPTIONS="$GPSD_OPTIONS -F $GPSD_SOCKET"
42fi
43
44DAEMON_ARGS="$GPSD_OPTIONS $DEVICES"
45
46#
47# Function that starts the daemon/service
48#
49do_start() {
50 local status pid
51
52 status=0
53 pid=`pidofproc $NAME` || status=$?
54 case $status in
55 0)
56 echo "$DESC already running ($pid)."
57 exit 1
58 ;;
59 *)
60 echo "Starting $DESC ..."
61 exec $DAEMON $DAEMON_ARGS >/dev/null 2>&1 || status=$?
62 echo "ERROR: Failed to start $DESC."
63 exit $status
64 ;;
65 esac
66}
67
68#
69# Function that stops the daemon/service
70#
71do_stop() {
72 local pid status
73
74 status=0
75 pid=`pidofproc $NAME` || status=$?
76 case $status in
77 0)
78 # Exit when fail to stop, the kill would complain when fail
79 kill -s 15 $pid >/dev/null && rm -f $PIDFILE && \
80 echo "Stopped $DESC ($pid)." || exit $?
81 ;;
82 *)
83 echo "$DESC is not running; none killed." >&2
84 ;;
85 esac
86
87 return $status
88}
89
90#
91# Function that sends a SIGHUP to the daemon/service
92#
93do_reload() {
94 local pid status
95
96 status=0
97 # If the daemon can reload its configuration without
98 # restarting (for example, when it is sent a SIGHUP),
99 # then implement that here.
100 pid=`pidofproc $NAME` || status=$?
101 case $status in
102 0)
103 echo "Reloading $DESC ..."
104 kill -s 1 $pid || exit $?
105 ;;
106 *)
107 echo "$DESC is not running; none reloaded." >&2
108 ;;
109 esac
110 exit $status
111}
112
113
114#
115# Function that shows the daemon/service status
116#
117status_of_proc () {
118 local pid status
119
120 status=0
121 # pidof output null when no program is running, so no "2>/dev/null".
122 pid=`pidofproc $NAME` || status=$?
123 case $status in
124 0)
125 echo "$DESC is running ($pid)."
126 exit 0
127 ;;
128 *)
129 echo "$DESC is not running." >&2
130 exit $status
131 ;;
132 esac
133}
134
135case "$1" in
136start)
137 do_start
138 ;;
139stop)
140 do_stop || exit $?
141 ;;
142status)
143 status_of_proc
144 ;;
145restart)
146 # Always start the service regardless the status of do_stop
147 do_stop
148 do_start
149 ;;
150force-reload)
151 # Only start the service when do_stop succeeds
152 do_stop && do_start
153 ;;
154*)
155 echo "Usage: $0 {start|stop|status|restart|force-reload}" >&2
156 exit 3
157 ;;
158esac