]> git.pld-linux.org Git - projects/rc-scripts.git/blame - service
validate systemd command, before sending it to systemd, to keep "service lighttpd...
[projects/rc-scripts.git] / service
CommitLineData
763b88c2
AM
1#!/bin/sh
2
3b917b57
AM
3# Set up a default search path.
4PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
5export PATH
6
58f95af1
ER
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
cb7c8b9c 19# check if SERVICE is present in systemd and ACTION is valid systemctl command
8e9e592e
ER
20# returns false if systemd is disabled or not active
21is_systemd_service() {
cb7c8b9c 22 local SERVICE=$1 ACTION=$2
8e9e592e
ER
23
24 [ "$USE_SYSTEMD" = "no" ] && return 1
cb7c8b9c
ER
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
8e9e592e
ER
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
cd835e00 66status_all() {
88a9daf2 67 local SERVICE TYPE
cd835e00
ER
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
88a9daf2
ER
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
cd835e00
ER
83 if ! grep -qs "\Wstatus)" "$SERVICE"; then
84 #printf " %s %-60s %s\n" "[?]" "$SERVICE:" "unknown" 1>&2
32eb1940 85 echo " [ ? ]{$TYPE} $SERVICE"
cd835e00
ER
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"
88a9daf2 91 echo " [ + ]{$TYPE} $SERVICE"
cd835e00
ER
92 continue
93 else
94 #printf " %s %-60s %s\n" "[-]" "$SERVICE:" "NOT running"
88a9daf2 95 echo " [ - ]{$TYPE} $SERVICE"
cd835e00
ER
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
86ae1ad7 106VERSION="$(basename $0) ver. 0.91-pld"
bf14fcab 107USAGE="Usage: $(basename $0) < option > | --status-all | \
763b88c2 108[ service_name [ command | --full-restart ] ]"
3b917b57 109
763b88c2 110SERVICE=
9fb27aac 111USE_UPSTART=
8e9e592e 112USE_SYSTEMD=
3b917b57 113
763b88c2 114if [ -d /etc/rc.d/init.d ]; then
1050f687 115 SERVICEDIR="/etc/rc.d/init.d"
763b88c2 116else
1050f687 117 SERVICEDIR="/etc/init.d"
763b88c2
AM
118fi
119
120if [ $# -eq 0 ]; then
1050f687
JR
121 echo "${USAGE}" >&2
122 exit 1
763b88c2
AM
123fi
124
a6c22d3d
AM
125cd /
126while [ $# -gt 0 ]; do
1050f687 127 case "${1}" in
dd0f0d33 128 --help | -h | --h* )
1050f687
JR
129 echo "${USAGE}" >&2
130 exit 0
131 ;;
dd0f0d33 132 --version | -V )
1050f687
JR
133 echo "${VERSION}" >&2
134 exit 0
135 ;;
75ca301e
AM
136 --ignore-dependencies)
137 export SYSTEMCTL_IGNORE_DEPENDENCIES=1
138 shift
139 ;;
140 --skip-redirect)
141 export SYSTEMCTL_SKIP_REDIRECT=1
142 shift
143 ;;
36924fb4
ER
144 --upstart)
145 USE_UPSTART=yes
9fb27aac
JK
146 shift
147 ;;
36924fb4
ER
148 --no-upstart)
149 USE_UPSTART=no
9fb27aac
JK
150 shift
151 ;;
8e9e592e
ER
152 --no-systemd)
153 USE_SYSTEMD=no
154 shift
155 ;;
cd835e00 156 *)
1050f687 157 if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
cd835e00 158 status_all
1050f687
JR
159 exit 0
160 elif [ $# -eq 2 -a "${2}" = "--full-restart" ]; then
161 SERVICE="${1}"
162 if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
9fb27aac
JK
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
1050f687
JR
165 exit $?
166 fi
167 elif [ -z "${SERVICE}" ]; then
168 SERVICE="${1}"
dd0f0d33
ER
169 elif [ -z "${ACTION}" ]; then
170 ACTION="${1}"
1050f687
JR
171 else
172 OPTIONS="${OPTIONS} ${1}"
173 fi
174 shift
175 ;;
176 esac
763b88c2
AM
177done
178
cb7c8b9c 179if is_systemd_service "${SERVICE}" "${ACTION}"; then
2a792152 180 echo >&2 "Redirecting to /bin/systemctl ${ACTION} ${SERVICE}.service ${OPTIONS}"
aa57b7e6
AM
181 exec /bin/systemctl ${ACTION} ${SERVICE}.service ${OPTIONS}
182elif [ -x "${SERVICEDIR}/${SERVICE}" ]; then
183 exec env -i USE_UPSTART=$USE_UPSTART LANG=$LANG PATH=$PATH TERM=$TERM "${SERVICEDIR}/${SERVICE}" ${ACTION} ${OPTIONS}
763b88c2 184else
1050f687
JR
185 echo "${SERVICE}: unrecognized service" >&2
186 exit 1
763b88c2 187fi
This page took 0.252363 seconds and 4 git commands to generate.