cdist-contrib/type/__runit_service/manifest

58 lines
1.4 KiB
Bash
Executable File

#!/bin/sh -e
os="$(cat "${__global}/explorer/os")"
case "${os}" in
debian|devuan)
svdir="/etc/service"
;;
*bsd)
svdir="/var/service"
;;
*)
echo "Your OS '${OS}' is currently not supported." >&2
exit 1
;;
esac
sv="${__object_id}"
state="$(cat "${__object}/parameter/state")"
run_file="${svdir}/${sv}/run"
source="$(cat "$__object/parameter/source")"
if [ "$source" = "-" ]; then
source="$__object/stdin"
fi
# Create this service's directory
__directory --state "${state}" "${svdir}/${sv}"
export require="__directory${svdir}/${sv}"
if [ "${state}" != "present" ]; then
# We are done here, the service gets removed
exit
fi
# Setup run file
__file --state "${state}" --mode 0550 --source "${source}" \
--onchange "sv restart '${sv}' || true" \
"${run_file}"
export require="${require} __file${run_file}"
if [ -f "${__object}/parameter/log" ]; then
# Setup logger if requested
logdir="/var/log/runit"
__directory --parents "${svdir}/${sv}/log"
__directory --state absent "${svdir}/${sv}/log/main" # Remove lingering old fashioned log
__directory --parents "${logdir}/${sv}"
export require="${require} __directory${svdir}/${sv}/log __directory${logdir}/${sv}"
__file "${svdir}/${sv}/log/run" \
--state "${state}" \
--mode 0755 \
--onchange "sv restart '${sv}/log' || true" \
--source "-" <<EOF
#!/bin/sh
exec svlogd -tt '${logdir}/${sv}'
EOF
fi