#!/bin/bash # # Simplify running cosmos, with serialization if flock is available. # readonly PROGNAME=$(basename "$0") readonly LOCKFILE_DIR=/tmp readonly LOCK_FD=200 lock() { local prefix=$1 local fd=${2:-$LOCK_FD} local lock_file=$LOCKFILE_DIR/$prefix.lock # create lock file eval "exec $fd>$lock_file" # acquier the lock flock -n "$fd" \ && return 0 \ || return 1 } eexit() { local error_str="$*" echo "$error_str" exit 1 } main () { lock "$PROGNAME" || eexit "Only one instance of $PROGNAME can run at one time." cosmos "$@" update cosmos "$@" apply touch /var/run/last-cosmos-ok.stamp find /var/lib/puppet/reports/ -type f -mtime +10 -print0 | xargs -0 rm -f } main "$@" if [ -f /cosmos-reboot ]; then rm -f /cosmos-reboot reboot fi