svc

Unnamed repository; edit this file 'description' to name the repository.
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 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:
MREADME.md | 1+
Mbin/service | 14+++++++++-----
Mbin/svc | 23+++++++++++------------
Msvc.d/bare.sh | 27+++++++++++++++++++--------
измењених датотека: 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