]> git.pld-linux.org Git - projects/rc-scripts.git/blob - service
470e72eb9a91c75f30ff24ae2e53a905bee6c4df
[projects/rc-scripts.git] / service
1 #!/bin/sh
2
3 # Set up a default search path.
4 PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
5 export PATH
6
7 is_ignored_file() {
8         case "$1" in
9         skeleton | README | *.dpkg-dist | *.dpkg-old | rc | rcS | single | reboot | bootclean.sh)
10                 return 0
11                 ;;
12         *rpmorig | *rpmnew | *rpmsave | *~ | *.orig)
13                 return 0
14                 ;;
15         esac
16         return 1
17 }
18
19 # check if SERVICE is present in systemd and ACTION is valid systemctl command
20 # returns false if systemd is disabled or not active
21 is_systemd_service() {
22         local SERVICE=$1 ACTION=$2
23
24         [ "$USE_SYSTEMD" = "no" ] && return 1
25
26         case "$ACTION" in
27         # list obtained as: man systemctl | grep N.*A.*M.*E
28         start | \
29         stop | \
30         reload | \
31         restart | \
32         try-restart | \
33         reload-or-restart | \
34         reload-or-try-restart | \
35         isolate | \
36         kill | \
37         is-active | \
38         status | \
39         show | \
40         reset-failed | \
41         enable | \
42         disable | \
43         is-enabled | \
44         reenable | \
45         preset | \
46         mask | \
47         unmask | \
48         link | \
49         load | \
50         snapshot | \
51         delete | \
52         set-environment | \
53         unset-environment )
54                 ;;
55         *)
56                 #echo "Not valid systemd command"
57                 return 1
58         esac
59
60         [ -x /bin/systemd_booted ] || return 1
61         /bin/systemd_booted || return 1
62
63         /bin/systemctl show "$SERVICE".service | grep -q LoadError= && return 1 || return 0
64 }
65
66 status_all() {
67         local SERVICE TYPE
68         cd ${SERVICEDIR}
69         for SERVICE in *; do
70                 case "${SERVICE}" in
71                 functions | halt | killall | single| linuxconf| kudzu)
72                         ;;
73                 *)
74                 if ! is_ignored_file "${SERVICE}" \
75                                 && [ -x "${SERVICEDIR}/${SERVICE}" ]; then
76                         if [ -f /etc/init/${SERVICE}.conf ]; then
77                                 # U for upstart
78                                 TYPE='U'
79                         else
80                                 # S for SysVinit
81                                 TYPE='S'
82                         fi
83                         if ! grep -qs "\Wstatus)" "$SERVICE"; then
84                                 #printf " %s %-60s %s\n" "[?]" "$SERVICE:" "unknown" 1>&2
85                                 echo " [ ? ]{$TYPE} $SERVICE"
86                                 continue
87                         else
88                                 out=$(env -i USE_UPSTART=$USE_UPSTART LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status 2>&1)
89                                 if [ "$?" = "0" -a -n "$out" ]; then
90                                         #printf " %s %-60s %s\n" "[+]" "$SERVICE:" "running"
91                                         echo " [ + ]{$TYPE} $SERVICE"
92                                         continue
93                                 else
94                                         #printf " %s %-60s %s\n" "[-]" "$SERVICE:" "NOT running"
95                                         echo " [ - ]{$TYPE} $SERVICE"
96                                         continue
97                                 fi
98                         fi
99                         #env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status
100                 fi
101                 ;;
102                 esac
103         done
104 }
105
106 VERSION="$(basename $0) ver. 0.91-pld"
107 USAGE="Usage: $(basename $0) < option > | --status-all | \
108 [ service_name [ command | --full-restart ] ]"
109
110 SERVICE=
111 USE_UPSTART=
112 USE_SYSTEMD=
113
114 if [ -d /etc/rc.d/init.d ]; then
115         SERVICEDIR="/etc/rc.d/init.d"
116 else
117         SERVICEDIR="/etc/init.d"
118 fi
119
120 if [ $# -eq 0 ]; then
121         echo "${USAGE}" >&2
122         exit 1
123 fi
124
125 cd /
126 while [ $# -gt 0 ]; do
127         case "${1}" in
128         --help | -h | --h* )
129                 echo "${USAGE}" >&2
130                 exit 0
131                 ;;
132         --version | -V )
133                 echo "${VERSION}" >&2
134                 exit 0
135                 ;;
136         --ignore-dependencies)
137                 export SYSTEMCTL_IGNORE_DEPENDENCIES=1
138                 shift
139                 ;;
140         --skip-redirect)
141                 export SYSTEMCTL_SKIP_REDIRECT=1
142                 shift
143                 ;;
144         --upstart)
145                 USE_UPSTART=yes
146                 shift
147                 ;;
148         --no-upstart)
149                 USE_UPSTART=no
150                 shift
151                 ;;
152         --no-systemd)
153                 USE_SYSTEMD=no
154                 shift
155                 ;;
156           *)
157                 if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
158                         status_all
159                         exit 0
160                 elif [ $# -eq 2 -a "${2}" = "--full-restart" ]; then
161                         SERVICE="${1}"
162                         if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
163                                 env -i USE_UPSTART=$USE_UPSTART LANG=$LANG PATH=$PATH TERM=$TERM "${SERVICEDIR}/${SERVICE}" stop
164                                 env -i USE_UPSTART=$USE_UPSTART LANG=$LANG PATH=$PATH TERM=$TERM "${SERVICEDIR}/${SERVICE}" start
165                                 exit $?
166                         fi
167                 elif [ -z "${SERVICE}" ]; then
168                         SERVICE="${1}"
169                 elif [ -z "${ACTION}" ]; then
170                         ACTION="${1}"
171                 else
172                         OPTIONS="${OPTIONS} ${1}"
173                 fi
174                 shift
175                 ;;
176         esac
177 done
178
179 if is_systemd_service "${SERVICE}" "${ACTION}"; then
180         echo >&2 "Redirecting to /bin/systemctl ${ACTION} ${SERVICE}.service ${OPTIONS}"
181         exec /bin/systemctl ${ACTION} ${SERVICE}.service ${OPTIONS}
182 elif [ -x "${SERVICEDIR}/${SERVICE}" ]; then
183         exec env -i USE_UPSTART=$USE_UPSTART LANG=$LANG PATH=$PATH TERM=$TERM "${SERVICEDIR}/${SERVICE}" ${ACTION} ${OPTIONS}
184 else
185         echo "${SERVICE}: unrecognized service" >&2
186         exit 1
187 fi
This page took 0.042805 seconds and 3 git commands to generate.