svc

Управљање сервисима
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 1cdd34d59aa1974c6309d4137e4a3826d33ae69a
родитељ f7fe5a52ff99bda432ff73e8d47446c5f8e673e0
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Thu,  4 May 2023 13:47:14 +0200

Fix wpa_supplicant + sdhcp; rollback inotifywait, use plain execution of sdhcp
service

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
Msvc.d/avail/sdhcp | 76+++++++++++++++++++++++++++++++++-------------------------------------------
Msvc.d/avail/wpa_supplicant | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msvc.d/bare.sh | 12++++++------
измењених датотека: 3, додавања: 115(+), брисања: 49(-)

diff --git a/svc.d/avail/sdhcp b/svc.d/avail/sdhcp @@ -5,65 +5,55 @@ svcbin=/bin/sdhcp . /bin/svc.d/default/${svc} -PID=$(pidof -o %PPID ${svcbin}) - +logger -it sdhcp "Called with arguments: {$@}" +if [ "$1" = "wlan0" ]; then + case $2 in + CONNECTED) + #${svcbin} ${PARAMS} >/dev/null 2>&1 & + ${svcbin} ${PARAMS} & + exit 0;; + DISCONNECTED) + exit 0;; + *) ;; + esac +fi +PID=$(pgrep -f ${svcbin}) case $1 in - -e) if [ -z "${PID}" ]; then + -e) if [ -z "${FROMSELF}" ] && [ "${IFACE}" = "wlan0" ]; then + exit 1 + elif [ -z "${PID}" ]; then exit 2 fi;; - -s) $0 -e - case $? in + -s) if [ "${IFACE}" = "wlan0" ]; then + exit 1 + fi + env FROMSELF=1 $0 -e + errno=$? + case ${errno} in 0) exit 1;; - 2) case "${PARAMS}" in - *wlan*) if [ -z "$(find "${RUNDIR}"/ -name \ - wpa_supplicant.up)" ] - then - while [ -z "$(inotifywait -r ${RUNDIR} \ - 2>/dev/null \ - | grep wpa_supplicant.up)" ] - do done - fi;; - *) if [ -n "${STARTDELAY}" ]; then - /bin/usleep "${STARTDELAY}" - fi;; - esac - ${svcbin} ${PARAMS} >/dev/null 2>&1 & - if [ -n "${RUNDIR}" ] && [ -n "${PIDFILE}" ] \ - && [ -z "$(find "${RUNDIR}"/ -name ${PIDFILE##*/})" ] - then - while [ -z "$(inotifywait -e create,modify \ - ${RUNDIR} 2>/dev/null \ - | grep ${PIDFILE##*/})" ]; do done - elif [ -n "${STARTDELAY}" ]; then + 2) ${svcbin} ${PARAMS} >/dev/null 2>&1 & + if [ -n "${STARTDELAY}" ]; then /bin/usleep "${STARTDELAY}" fi - $0 -e - errno=$? - if [ -n "${RUNDIR}" ]; then - case $errno in - 0) :> "${RUNDIR}/${SERVICE}.up";; - *) rm "${RUNDIR}/${SERVICE}.up";; - esac - fi;; - *) return $?;; + env FROMSELF=1 $0 -e;; + *) exit ${errno};; esac;; - -k) $0 -e + -k) env FROMSELF=1 $0 -e case $? in 2) exit 1;; 0) kill "${PID}" >/dev/null 2>&1 - if [ -n "$(pidof -o %PPID "${svcbin}" \ - 2>/dev/null)" ] + if [ -n "$(pgrep -f "${svcbin}" 2>/dev/null)" ] then - pkill -9 -f "${BIN}" >/dev/null 2>&1 \ + pkill -9 -f "${svcbin}" >/dev/null 2>&1 \ || exit 2 fi - if [ -n "${RUNDIR}" ]; then - rm "${RUNDIR}/${SERVICE}.up" - fi rm "${PIDFILE}" 2>/dev/null;; *) exit 1;; esac;; - -r) $0 -k + -r) if [ "${IFACE}" = "wlan0" ]; then + exit 1 + fi + $0 -k $0 -s;; *) exit 2;; esac diff --git a/svc.d/avail/wpa_supplicant b/svc.d/avail/wpa_supplicant @@ -0,0 +1,76 @@ +#!/bin/sh + +svc=wpa_supplicant +svcbin=/sucks/bin/wpa_supplicant +wpa_cli=/sucks/bin/wpa_cli + +[ -e "/bin/svc.d/default/${svc}" ] && . "/bin/svc.d/default/${svc}" + +[ -n "${RUNDIR}" ] && mkdir -p "${RUNDIR}" + +PIDLOOPDELAY=500000 +PID=$(pgrep -f ${svcbin}) +case $1 in + -e) if [ -z "${PID}" ]; then + exit 2 + fi;; + -s) $0 -e + case $? in + 0) return 1;; + 2) + logger -it wpa_supplicant "Executing ${svcbin} ${PARAMS}" + ${svcbin} ${PARAMS} >/dev/null 2>&1 & +# if [ -n "${RUNDIR}" ] && [ -n "${PIDFILE}" ] \ +# && [ ! -e "${PIDFILE}" ] +# then +# while [ ! -e "${PIDFILE}" ]; do +# /bin/usleep ${PIDLOOPDELAY} +# done +# elif [ -n "${STARTDELAY}" ]; then +# /bin/usleep "${STARTDELAY}" +# fi + $0 -e + errno=$? + # logger -it wpa_supplicant "Executing $0 -e (errno: $errno)" + if [ -n "${RUNDIR}" ]; then + case $errno in + 0) :> "${RUNDIR}/${SERVICE}.up";; + *) rm "${RUNDIR}/${SERVICE}.up" \ + 2>/dev/null;; + esac + fi +# logger -it wpa_supplicant "Executing ${wpa_cli} -i ${IFACE} -a ${0%/*}/sdhcp -B" +# logger -it wpa_supplicant "Exists ${0%/*}/sdhcp? $(if [ -e ${0%/*}/sdhcp ]; then echo yes; else echo no; fi)" + logger -it wpa_supplicant "Executing ${0%/*}/sdhcp ${IFACE} CONNECTED" + ${0%/*}/sdhcp "${IFACE}" CONNECTED + # Run sdhcp when connected; not reliable in my testing + #${wpa_cli} -i "${IFACE}" -a ${0%/*}/sdhcp -B + ;; + *) return $?;; + esac;; + -k) $0 -e + case $? in + 2) return 1;; + 0) pkill -f "${svcbin}" >/dev/null 2>&1 + pkill -f ${wpa_cli} -i "${IFACE}" >/dev/null 2>&1 + if [ -n "$(pgrep -f "${svcbin}" 2>/dev/null)" ] + then + pkill -9 -f "${svcbin}" >/dev/null 2>&1 \ + || exit 2 + fi + if [ -n "$(pgrep -f ${wpa_cli} -i "${IFACE}" \ + 2>/dev/null)" ] + then + pkill -9 -f ${wpa_cli} -i "${IFACE}" \ + >/dev/null 2>&1 || exit 2 + fi + rm "${PIDFILE}" + if [ -n "${RUNDIR}" ]; then + rm "${RUNDIR}/${SERVICE}.up" + fi;; + *) return $?;; + esac;; + -r) $0 -k + $0 -s;; + *) exit 2;; +esac diff --git a/svc.d/bare.sh b/svc.d/bare.sh @@ -25,9 +25,9 @@ do fi done [ -z "${BIN}" ] && exit 2 +[ -n "${RUNDIR}" ] && mkdir -p "${RUNDIR}" -PID=$(pidof -o %PPID ${BIN}) - +PID=$(pgrep -f ${BIN}) case $1 in -e) if [ -z "${PID}" ]; then exit 2 @@ -51,8 +51,9 @@ case $1 in errno=$? if [ -n "${RUNDIR}" ]; then case $errno in - 0) :> "${RUNDIR}/${SERVICE}.up";; - *) rm "${RUNDIR}/${SERVICE}.up";; + 0) :> "${RUNDIR}/${SERVICE}.up";; + *) rm "${RUNDIR}/${SERVICE}.up" \ + 2>/dev/null;; esac fi;; *) return $?;; @@ -61,8 +62,7 @@ case $1 in case $? in 2) return 1;; 0) pkill -f "${BIN}" >/dev/null 2>&1 - if [ -n "$(pidof -o %PPID "${BIN}" \ - 2>/dev/null)" ] + if [ -n "$(pgrep -f "${BIN}" 2>/dev/null)" ] then pkill -9 -f "${BIN}" >/dev/null 2>&1 \ || exit 2