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