#!/bin/bash get_homedirs() { while read line; do uname="$(cut -d: -f1 <<< "$line")" uid="$(cut -d: -f3 <<< "$line")" udir="$(cut -d: -f6 <<< "$line")" if [[ "$uid" -ge 1000 ]]; then echo "$uname:$udir" fi done > "$rclog" ulimit -u 500 su -l "$rcuser" -c "$1" &>> "$rclog" } start() { touch /var/log/bootrun.log chmod 640 /var/log/bootrun.log chown root:log /var/log/bootrun.log mkdir -p /var/log/bootrun for line in $(get_homedirs); do user="$(cut -d: -f1 <<< "$line")" file="$(cut -d: -f2 <<< "$line")/.bootrun" if [ -x "$file" ]; then start_run "$file" "$user" &>> /var/log/bootrun.log & fi done } stop_run() { rcuser=$2 rclog="/var/log/bootrun/$rcuser.log" touch "$rclog" chmod 600 "$rclog" chown "$rcuser" "$rclog" echo "Shutdownrun on $(date)" >> "$rclog" ulimit -u 500 su -l "$rcuser" -c "/usr/lib/bootrun.timeoutrun $1" &>> "$rclog" } stop() { rcpids="" for line in $(get_homedirs); do user="$(cut -d: -f1 <<< "$line")" file="$(cut -d: -f2 <<< "$line")/.shutdownrun" if [ -x "$file" ]; then stop_run "$file" "$user" &>> /var/log/bootrun.log & rcpids="$rcpids $!" fi done wait $rcpids } case "$1" in start) start;; stop) stop;; *) echo "usage: $0 {start|stop}";; esac