чување 1866a36872d6513a140feb075b2a4bce7451df20
родитељ e9af41b712a178103e08d98487c080c3e84a8567
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Wed, 20 Jul 2022 12:08:28 +0200
Add commands to service and make everything consistent; adjust hwclock for sbase version; add metalog, sdhcp
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
измењених датотека: 6, додавања: 148(+), брисања: 52(-)
diff --git a/bin/service b/bin/service
@@ -7,12 +7,19 @@
# 1: Redundant
# 2: Error
-[ -e /lib/g_fun.sh ] && . /lib/g_fun.sh
+BASEDIR=/bin/svc.d
+
+if [ -e /lib/g_fun.sh ]; then
+ . /lib/g_fun.sh
+else
+ echo /lib/g_fun.sh missing >&2
+ exit 2
+fi
usage()
{
- printf "usage: %s [all|activate|deactivate|exists|list|start|stop|"\
-"restart] service\n" "${0##*/}" >&2
+ printf "usage: %s [a(ctivated?)|d(eactivate)|e(xists)|l(ist)|"\
+"sta(rt)|sto(p)|r(estart)] [service|all]\n" "${0##*/}" >&2
}
if [ $# -lt 2 ]; then
@@ -23,55 +30,81 @@ fi
cmd="$1"
service="$2"
-errno()
+seterrno()
{
return $1
}
-exists=0
-if [ -z "${service}" ]; then
+doservice()
+{
+ local cmd=$1 service=$2 exists=0 nooutcome=0 errno stop=0
+
case "${cmd}" in
- ac*) cmd=all;;
- *) ;;
+ a*) msg serv "Activating %s\t\t\t" ${service##*/}
+ svc -a "${service}";;
+ d*) msg serv "Deactivating %s\t\t\t" ${service##*/}
+ svc -d "${service}";;
+ e*) msg serv "Exists %s?\t\t\t" ${service##*/}
+ exists=1
+ svc -e "${service}";;
+ l*) svc -l
+ nooutcome=1;;
+ sta*) msg serv "Starting %s\t\t\t" ${service##*/}
+ svc -s "${service}";;
+ sto*) msg serv "Stopping %s\t\t\t" ${service##*/}
+ svc -k "${service}"
+ stop=1;;
+ r*) msg serv "Restarting %s\t\t\t" ${service##*/}
+ svc -r "${service}";;
+ *) msg serv "What to do with %s?\t\t\t" ${service##*/}
+ seterrno 3;;
+ esac
+ errno=$?
+ if [ "${nooutcome}" -eq 1 ]; then
+ return "${errno}"
+ else
+ case ${errno} in
+ 0) if [ "${exists}" -eq 1 ]; then
+ printf "${green}( ${white}YE${norm} ${green})${norm}\n"
+ else
+ printf "${green}( ${white}OK${norm} ${green})${norm}\n"
+ fi;;
+ 1) if [ "${stop}" -eq 1 ]; then
+ printf "${green}(NOTR)${norm}\n"
+ else
+ printf "${green}(RNNG)${norm}\n"
+ fi
+ return 1;;
+ 2) if [ "${exists}" -eq 1 ]; then
+ printf "${green}( ${lred}NO${norm} ${green})${norm}\n"
+ else
+ printf "${green}(${lred}FAIL${norm}${green})${norm}\n"
+ fi
+ return 2;;
+ 3) printf "${green}(${lred}FAIL${norm}${green})${norm}\n"
+ usage
+ return 3;;
+ *) printf "${green}(${yellow} ?? ${norm}${green})${norm}\n"
+ return 2;;
esac
+ fi
+}
+
+if [ "${service}" = "all" ] && \
+ [ "$(echo ${cmd} | sed 's/\(.\).*/\1/')" = "a" ] && \
+ [ "$(echo ${cmd} | sed 's/.*\(.\)$/\1/')" != "d" ]
+then
+ find ${BASEDIR}/avail -type f | \
+ while read -r service; do
+ doservice "${cmd}" "${service##*/}"
+ done
+elif [ "${service}" = "all" ] && \
+ [ "$(echo ${cmd} | sed 's/\(.\).*/\1/')" != "l" ]
+then
+ find ${BASEDIR}/run -type l | \
+ while read -r service; do
+ doservice "${cmd}" "${service##*/}"
+ done
+else
+ doservice "${cmd}" "${service}"
fi
-case "${cmd}" in
-al*) svc -a;;
-ac*) msg serv "Activating %s\t\t\t" ${service##*/}
- svc -a "${service}";;
-d*) msg serv "Deactivating %s\t\t\t" ${service##*/}
- svc -d "${service}";;
-e*) msg serv "Exists %s?\t\t\t" ${service##*/}
- exists=1
- svc -e "${service}";;
-l*) svc -l;;
-sta*) msg serv "Starting %s\t\t\t" ${service##*/}
- svc -s "${service}";;
-sto*) msg serv "Stopping %s\t\t\t" ${service##*/}
- svc -k "${service}";;
-r*) msg serv "Restarting %s\t\t\t" ${service##*/}
- svc -r "${service}";;
-*) msg serv "What to do with %s?\t\t\t" ${service##*/}
- errno 3;;
-esac
-case $? in
- 0)
- if [ "${exists}" -eq 1 ]; then
- printf "${green}( ${white}YES${norm} ${green})${norm}\n"
- else
- printf "${green}( ${white}OK${norm} ${green})${norm}\n"
- fi;;
- 1) printf "${green}(RNNG)${norm}\n"
- exit 1;;
- 2) if [ "${exists}" -eq 1 ]; then
- printf "${green}( ${lred}NO${norm} ${green})${norm}\n"
- else
- printf "${green}(${lred}FAIL${norm}${green})${norm}\n"
- fi
- exit 2;;
- 3) printf "${green}(${lred}FAIL${norm}${green})${norm}\n"
- usage
- exit 3;;
- *) printf "${green}(${yellow} ?? ${norm}${green})${norm}\n"
- exit 2;;
-esac
diff --git a/svc.d/avail/sdhcp b/svc.d/avail/sdhcp
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+svc=sdhcp
+svcbin=/bin/sdhcp
+
+. /bin/svc.d/default/${svc}
+
+if [ -z "${PIDFILE}" ]; then
+ exit 2
+fi
+
+case $1 in
+ -e) set -x
+ if [ ! -e "${PIDFILE}" ]; then
+ exit 2
+ elif [ -z "$(ps -ef | awk '{print $2}' | \
+ grep $(<"${PIDFILE}"))" ]; then
+ exit 2
+ fi
+ set +x;;
+ -s) ${svcbin} ${PARAMS} >/dev/null 2>&1 &;;
+ -k) set -x
+ if [ ! -e "${PIDFILE}" ]; then
+ exit 1
+ elif [ -z "$(ps -ef | awk '{print $2}' | \
+ grep $(<"${PIDFILE}"))" ]
+ then
+ rm "${PIDFILE}"
+ exit 1
+ else
+ kill $(<"${PIDFILE}") >/dev/null 2>&1
+ if [ -n "$(ps -ef | awk '{print $2}' | \
+ grep $(<"${PIDFILE}"))" ]
+ then
+ kill -9 $(<"${PIDFILE}") >/dev/null 2>&1 \
+ || exit 2
+ fi
+ rm "${PIDFILE}"
+ fi
+ ps -ef | grep sdhcp
+ set +x;;
+ -r) if [ -e "${PIDFILE}" ]; then
+ if [ -z "$(ps -ef | awk '{print $2}' | \
+ grep $(<"${PIDFILE}"))" ]
+ then
+ rm "${PIDFILE}"
+ else
+ kill $(<"${PIDFILE}") >/dev/null 2>&1
+ if [ -n "$(ps -ef | awk '{print $2}' | \
+ grep $(<"${PIDFILE}"))" ]
+ then
+ kill -9 $(<"${PIDFILE}") \
+ >/dev/null 2>&1 || exit 2
+ fi
+ rm "${PIDFILE}"
+ fi
+ fi
+ ${svcbin} ${PARAMS} >/dev/null 2>&1 &;;
+esac
diff --git a/svc.d/default/crond b/svc.d/default/crond
@@ -1,2 +1,2 @@
-PARAMS="-s /etc/cron/cron.d -c /var/spool/cron -t /var/spool/cron -S -l info"
-
+PARAMS="-S -l info"
+LOGFILE=/var/log/crond.log
diff --git a/svc.d/default/hwclock b/svc.d/default/hwclock
@@ -1,3 +1,3 @@
-# --utc or --localtime
-PARAMS="--utc"
+# sbase hwclock only has UTC support
+PARAMS="-u /dev/rtc0"
diff --git a/svc.d/default/metalog b/svc.d/default/metalog
@@ -0,0 +1,2 @@
+PARAMS="-B -g metalog"
+PIDFILE=/var/run/metalog.pid
diff --git a/svc.d/default/sdhcp b/svc.d/default/sdhcp
@@ -0,0 +1,2 @@
+PARAMS="eth0"
+PIDFILE=/var/run/sdhcp.pid