чување fbeb0ee6078a832f34e7dba737661aec6af46b37
родитељ ec9a4789890f97be24954888df1ee174a7d8a681
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Mon, 18 Jul 2022 13:52:08 +0200
New command: exists (-e); better(?) checks
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
измењених датотека: 4, додавања: 40(+), брисања: 25(-)
diff --git a/README.md b/README.md
@@ -41,6 +41,7 @@ special variable from /bin/svc.d/default/somebin.
% svc -a ser # activate service »ser« to be run on startup
% svc -c # create the basic directories of svc (configure)
% svc -d ser # deactivate service »ser«
+ % svc -e ser # test if service »ser« exists
% svc -k # kill all services linked to /bin/svc.d/run
% svc -k ser # kill the service »ser«
% svc -s # run all services linked to /bin/svc.d/run
diff --git a/bin/service b/bin/service
@@ -7,8 +7,7 @@
if [ $# -lt 2 ];
then
- printf "usage: %s [start|stop|restart] service\n" "$(basename "$0")" \
- >&2
+ printf "usage: %s [exists|start|stop|restart] service\n" "${0##*/}" >&2
exit 2
fi
@@ -16,9 +15,14 @@ cmd="$1"
service="$2"
case "$cmd" in
-sta*) svc -s "$service";;
-sto*) svc -k "$service";;
-r*) svc -r "$service";;
+exis*) svc -e "${service}"
+ exit $?;;
+sta*) svc -s "${service}"
+ exit $?;;
+sto*) svc -k "${service}"
+ exit $?;;
+r*) svc -r "${service}"
+ exit $?;;
*) printf "usage: %s [start|stop|restart] service\n" "$(basename "$0")" \
>&2
exit 2;;
diff --git a/bin/svc b/bin/svc
@@ -29,11 +29,13 @@ runservice() {
dir="$2"
cmd="$3"
- if [ $(stat -L -t "$dir/$service" | cut -d' ' -f 2) -eq 0 ];
+ if [ $(stat -t "${dir}/${service}" | cut -d' ' -f 2) -eq 0 ];
then
- "./bare.sh" "$service" "$cmd" 2>&1 >/dev/null &
+ "./bare.sh" "${service}" "${cmd}" >/dev/null 2>&1
+ exit $?
else
- "$dir/$service" "$cmd" 2>&1 >/dev/null &
+ "${dir}/${service}" "${cmd}" >/dev/null 2>&1
+ exit $?
fi
}
@@ -43,19 +45,14 @@ doservice() {
if [ -z "${service}" ];
then
- services=$(ls -1 run)
- for s in ${services};
+ for s in $(find run -type l);
do
- runservice "$s" run "$cmd"
- #printf "%s: '%s' %s.\n" \
- # "$BASENAME" "$s" "$cmd"
+ runservice "${s##*/}" run "$cmd"
done
else
if [ -x "avail/$service" ];
then
runservice "$service" avail "$cmd"
- #printf "%s: '%s' %s.\n" \
- # "$BASENAME" "$service" "$cmd"
else
printf "%s: '%s' is not available or executable.\n" \
"$BASENAME" "$service" >&2
@@ -88,14 +85,16 @@ case "$1" in
"$BASENAME" >&2
exit 2
fi;;
- -k|-s) doservice "$1" "$2";;
+ -e|-k|-s)
+ doservice "$1" "$2";;
-l) cd avail
ls .;;
-r) if [ $# -gt 1 ];
then
#set -x
- svc -k "$2"
+ svc -k "$2" || exit $?
svc -s "$2"
+ exit $?
else
printf "%s: please give a service name.\n" \
"$BASENAME" >&2
diff --git a/svc.d/bare.sh b/svc.d/bare.sh
@@ -24,21 +24,32 @@ do
break
fi
done
-[ -z "$BIN" ] && exit 2
+[ -z "${BIN}" ] && exit 2
-PID=$(pidof -o %PPID $BIN)
+PID=$(pidof -o %PPID ${BIN})
case $1 in
- -s) if [ -z "$PID" ]; then
- $BIN $PARAMS
+ -e) [ -z "${PID}" ] && exit 2
+ exit 0;;
+ -s) if [ -z "${PID}" ]; then
+ ${BIN} ${PARAMS} &
+ if ! ps -p $! >/dev/null 2>&1; then
+ exit 2
+ fi
+ exit 0
else
exit 1
fi;;
- -k) kill $PID &> /dev/null
- if [ -n "$PID" ]; then
- kill -9 $PID &> /dev/null || exit 2
+ -k) if [ -z "${PID}" ]; then
+ exit 1
else
- exit 2
+ kill "${PID}" >/dev/null 2>&1
+ if ps -p "${PID}" >/dev/null 2>&1; then
+ kill -9 "${PID}" >/dev/null 2>&1 || exit 2
+ else
+ exit 1
+ fi
+ exit 0
fi;;
*) exit 2;;
esac