diff options
Diffstat (limited to 'bootrun')
-rw-r--r-- | bootrun | 67 |
1 files changed, 67 insertions, 0 deletions
@@ -0,0 +1,67 @@ +#!/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 </etc/passwd +} + +start_run() { + rcuser=$2 + rclog="/var/log/bootrun/$rcuser.log" + touch "$rclog" + chmod 600 "$rclog" + chown "$rcuser" "$rclog" + echo "Bootrun on $(date)" >> "$rclog" + 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" + su -l "$rcuser" -c "/usr/lib/bootrun.timoutrun $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 |