init: clean up periodic_scheduler script and upstart jobs that use it
- Remove script stanzas from upstart scripts. They are unnecesary.
- Properly quote variable names where it makes sense.
- EXTRA! EXTRA! New Curly Braces around variables!
BUG=none
TEST=manual
Change-Id: Iaafb639d6c76b01e94c70f5213a8e432bb1b57dc
Reviewed-on: https://chromium-review.googlesource.com/195689
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Tested-by: Gaurav Shah <gauravsh@chromium.org>
Commit-Queue: Gaurav Shah <gauravsh@chromium.org>
diff --git a/crash-sender.conf b/crash-sender.conf
index fcc5bcc..25ad2f8 100644
--- a/crash-sender.conf
+++ b/crash-sender.conf
@@ -8,6 +8,4 @@
start on starting system-services
stop on stopping system-services
-script
- exec periodic_scheduler 3600 crash_sender /sbin/crash_sender
-end script
+exec periodic_scheduler 3600 crash_sender /sbin/crash_sender
diff --git a/log-rotate.conf b/log-rotate.conf
index f327276..c465959 100644
--- a/log-rotate.conf
+++ b/log-rotate.conf
@@ -8,6 +8,4 @@
start on starting system-services
stop on stopping system-services
-script
- exec periodic_scheduler 86400 cleanup_logs /usr/sbin/chromeos-cleanup-logs
-end script
+exec periodic_scheduler 86400 cleanup_logs /usr/sbin/chromeos-cleanup-logs
diff --git a/periodic_scheduler b/periodic_scheduler
index 035169f..de5f5b6 100755
--- a/periodic_scheduler
+++ b/periodic_scheduler
@@ -11,50 +11,61 @@
set -e -u
+CHECK_DELAY=300 # Check every 5 minutes.
SPOOL_DIR=/var/spool/cron-lite
-LOGGER="logger -p local3.info -t $0"
-trap "$LOGGER 'exiting'" EXIT
+log() {
+ logger -p local3.info -t "$@"
+}
+
+trap "log 'exiting'" EXIT
check_and_fix_spool_paths() {
# Avoid weird spool paths if possible.
test -L /var/spool && unlink /var/spool
- test -L $SPOOL_DIR && unlink $SPOOL_DIR
- mkdir -p $SPOOL_DIR
- if [ ! -O $SPOOL_DIR -o ! -d $SPOOL_DIR ]; then
- $LOGGER "Spool directory is damaged. Aborting!"
+ test -L "${SPOOL_DIR}" && unlink "${SPOOL_DIR}"
+ mkdir -p "${SPOOL_DIR}"
+ if [ ! -O "${SPOOL_DIR}" -o ! -d "${SPOOL_DIR}" ]; then
+ log "Spool directory is damaged. Aborting!"
exit 1
fi
}
main() {
- local delay=$1
- local name=$2
- local script=$3
- local spool_file="$SPOOL_DIR/$name"
+ local delay="$1"
+ local name="$2"
+ local spool_file="${SPOOL_DIR}/${name}"
+ shift 2
- [ -z $delay ] && exit 1
- [ -z $name ] && exit 1
- [ -z $script ] && exit 1
+ [ -z "${delay}" ] && exit 1
+ [ -z "${name}" ] && exit 1
+ [ $# -eq 0 ] && exit 1
check_and_fix_spool_paths
while true; do
# Allow the sleep to be killed manually without terminating the handler.
- sleep 300 || true # Check every 5 minutes.
+ sleep "${CHECK_DELAY}" || true
- [ ! -e $spool_file ] && touch $spool_file
+ [ ! -e "${spool_file}" ] && touch "${spool_file}"
- local last_rotation="$(stat -c "%Y" $spool_file 2>/dev/null || echo 0)"
+ local last_rotation="$(stat -c "%Y" "${spool_file}" 2>/dev/null || echo 0)"
local now="$(date +%s)"
local time_diff=$((now - last_rotation))
- if [ $time_diff -gt $delay ]; then
- rm "$spool_file" || true
- touch "$spool_file"
- $LOGGER "running $script for $name"
- (sh -c "$script" || true; $LOGGER "$name completed") &
+ if [ ${time_diff} -gt ${delay} ]; then
+ rm "${spool_file}" || true
+ touch "${spool_file}"
+ # Make sure to reclaim status info about background processes.
+ # At this point, all background processes should be dead.
+ # We don't actually care about the result though.
+ wait || true
+ log "running $* for ${name}"
+ (
+ timeout -k ${CHECK_DELAY} sh -c '"$@"' -- "$@" || true
+ log "${name} completed"
+ ) &
fi
done
}
-main $@
+main "$@"