svc

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

чување f7fe5a52ff99bda432ff73e8d47446c5f8e673e0
родитељ 2e0f60d63d21bb975d3c8b63f467d10ccd5fca68
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Wed,  3 May 2023 22:24:08 +0200

sdhcp: Use inotifywait to wait for wpa_supplicant; wpa_supplicant: Specify
pidfile with -P

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

Diffstat:
MTODO | 4++--
Msvc.d/avail/sdhcp | 72++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Msvc.d/bare.sh | 22++++++++++++++++++++--
Msvc.d/default/sdhcp | 3++-
Msvc.d/default/wpa_supplicant | 4+++-
измењених датотека: 5, додавања: 73(+), брисања: 32(-)

diff --git a/TODO b/TODO @@ -1,5 +1,5 @@ TODO ==== -[ ] Add some form of dependance - [ ] Make sdhcp depend on wpa_supplicant if interface is wlan0 +[x] Add some form of dependance + [x] Make sdhcp depend on wpa_supplicant if interface is wlan0 diff --git a/svc.d/avail/sdhcp b/svc.d/avail/sdhcp @@ -5,45 +5,65 @@ svcbin=/bin/sdhcp . /bin/svc.d/default/${svc} -PID='' -if [ -z "${PIDFILE}" ]; then - exit 2 -elif [ -e "${PIDFILE}" ]; then - PID=$(< "${PIDFILE}") -fi +PID=$(pidof -o %PPID ${svcbin}) case $1 in -e) if [ -z "${PID}" ]; then exit 2 - elif [ -z "$(ps -ef | awk '{print $2}' | \ - grep "${PID}")" ]; then - exit 2 fi;; - -s) svc -e ${svc} + -s) $0 -e case $? in - 0) exit 1;; - 2) ${svcbin} ${PARAMS} >/dev/null 2>&1 & - if [ -n "${STARTDELAY}" ]; then + 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 - svc -e ${svc};; - *) ;; + 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 + /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 $?;; esac;; - -k) svc -e ${svc} + -k) $0 -e case $? in 2) exit 1;; 0) kill "${PID}" >/dev/null 2>&1 - if [ -n "$(ps -ef | awk '{print $2}' | \ - grep "${PID}")" ] + if [ -n "$(pidof -o %PPID "${svcbin}" \ + 2>/dev/null)" ] then - kill -9 "${PID}" >/dev/null \ - 2>&1 || exit 2 + pkill -9 -f "${BIN}" >/dev/null 2>&1 \ + || exit 2 + fi + if [ -n "${RUNDIR}" ]; then + rm "${RUNDIR}/${SERVICE}.up" fi - rm "${PIDFILE}" 2>/dev/null - exit 0;; - *) ;; + rm "${PIDFILE}" 2>/dev/null;; + *) exit 1;; esac;; - -r) svc -k ${svc} - svc -s ${svc};; + -r) $0 -k + $0 -s;; *) exit 2;; esac diff --git a/svc.d/bare.sh b/svc.d/bare.sh @@ -36,10 +36,25 @@ case $1 in case $? in 0) return 1;; 2) ${BIN} ${PARAMS} >/dev/null 2>&1 & - if [ -n "${STARTDELAY}" ]; then + 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 /bin/usleep "${STARTDELAY}" fi - $0 "${SERVICE}" -e;; + $0 "${SERVICE}" -e + errno=$? + if [ -n "${RUNDIR}" ]; then + case $errno in + 0) :> "${RUNDIR}/${SERVICE}.up";; + *) rm "${RUNDIR}/${SERVICE}.up";; + esac + fi;; *) return $?;; esac;; -k) $0 "${SERVICE}" -e @@ -51,6 +66,9 @@ case $1 in then pkill -9 -f "${BIN}" >/dev/null 2>&1 \ || exit 2 + fi + if [ -n "${RUNDIR}" ]; then + rm "${RUNDIR}/${SERVICE}.up" fi;; *) return $?;; esac;; diff --git a/svc.d/default/sdhcp b/svc.d/default/sdhcp @@ -1,2 +1,3 @@ +RUNDIR=/var/run +PIDFILE=${RUNDIR}/sdhcp.pid PARAMS="eth0" -PIDFILE=/var/run/sdhcp.pid diff --git a/svc.d/default/wpa_supplicant b/svc.d/default/wpa_supplicant @@ -1 +1,3 @@ -PARAMS="-Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B" +RUNDIR=/var/run/wpa_supplicant +PIDFILE=${RUNDIR}/wpa_supplicant.pid +PARAMS="-Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -P${PIDFILE} -B"