57 lines
1.6 KiB
Bash
Executable file
57 lines
1.6 KiB
Bash
Executable file
#!/bin/bash
|
|
# jeremystartm's jobrunner
|
|
|
|
if [ -f "${HOME}/.local/share/jobrunner.env" ]; then
|
|
source "${HOME}/.local/share/jobrunner.env"
|
|
fi
|
|
|
|
if [ -z "${JOBRUNNER_TIMEOUT}" ]; then
|
|
export "JOBRUNNER_TIMEOUT=0.5s"
|
|
fi
|
|
if [ -z "${JOBRUNNER_RUNDIR}" ]; then
|
|
export "JOBRUNNER_RUNDIR=${XDG_RUNTIME_DIR}/jobrunner/"
|
|
fi
|
|
if [ -a "${JOBRUNNER_RUNDIR}" ] && [ ! -d "${JOBRUNNER_RUNDIR}" ]; then
|
|
echo ":: Error: \"${JOBRUNNER_RUNDIR}\" is not a directory, aborting."
|
|
else
|
|
echo ":: Creating RUNDIR"
|
|
mkdir -p "${JOBRUNNER_RUNDIR}"
|
|
fi
|
|
if [ -f "${JOBRUNNER_RUNDIR}/jobrunner.pid" ]; then
|
|
echo ":: Error: The jobrunner daemon is already running."
|
|
echo " If you think that this is an error, remove"
|
|
echo " \"${JOBRUNNER_RUNDIR}/jobrunner.pid\"."
|
|
exit 1
|
|
fi
|
|
echo ":: Writing PID"
|
|
echo "$$" > "${JOBRUNNER_RUNDIR}/jobrunner.pid"
|
|
|
|
echo ":: Started jobrunner daemon" &> "${JOBRUNNER_RUNDIR}/jobrunner.log"
|
|
|
|
function log() {
|
|
echo ":: $*"
|
|
echo ":: $*" &>> "${JOBRUNNER_RUNDIR}/jobrunner.log"
|
|
}
|
|
function logcmd() {
|
|
echo ":: EXEC \"$*\""
|
|
$* &>> "${JOBRUNNER_RUNDIR}/jobrunner.log"
|
|
}
|
|
|
|
log "Entering loop"
|
|
while true; do
|
|
if [ ! -d "${JOBRUNNER_RUNDIR}" ]; then
|
|
logcmd mkdir -p "${JOBRUNNER_RUNDIR}"
|
|
fi
|
|
if [ -f "${JOBRUNNER_RUNDIR}/jobrunner.cmd" ]; then
|
|
log "Executing command"
|
|
JOBRUNNER_COMMAND="$(cat "${JOBRUNNER_RUNDIR}"/jobrunner.cmd)"
|
|
logcmd rm -rf "${JOBRUNNER_RUNDIR}/jobrunner.cmd"
|
|
if [ "${JOBRUNNER_COMMAND}" == "EXIT" ]; then
|
|
log "Exiting, as requested"
|
|
logcmd rm -rf "${JOBRUNNER_RUNDIR}"
|
|
exit 1
|
|
fi
|
|
bash -c "${JOBRUNNER_COMMAND}" &
|
|
fi
|
|
sleep "${JOBRUNNER_TIMEOUT}"
|
|
done
|