[ale] Question for perl gurus
    Danny Cox 
    danscox at mindspring.com
       
    Wed Mar  5 12:33:50 EST 2003
    
    
  
Chris,
On Wed, 2003-03-05 at 12:18, Christopher Fowler wrote:
> I need to convert this script to perl to solve a problem that
> I do not believe bash solves.
> 
> #!/bin/sh
> 
> for i in /home/*
> do
>    U=`basename $i`
>    if [ -f ${i}/rc ]
>    then
>      echo "Starting RC script for: "${U}
>      su - ${U} -c "./rc $*"
>    fi
> done
> 
> What this simple script does is live in /etc/rc.d/init.d and looks
> at every users home directory for a file called ~/rc.  If it sees that
> file then it executes it as the user.  That file can look like this
	Well, first off, I'd use /etc/passwd to get the user names, with a
heuristic (hack) to start with user X, then use ~user to get the home
dir thereof, but that's a nit ;-)
	This is quite similar to Douglas' problem the other day.  Start the
script in the background, come back later, and if it still exists, kill
it.  Like this:
	echo "Starting RC script for: $U"
	su - "$U" -c "./rc $*" &
	PID=$!
	sleep 120
	if [ -d /proc/$PID ]
	then
		kill -KILL -- $PID  # perhaps -$PID for the whole group
	fi
	wait $PID
Of course, that solution will always wait 2 minutes between EVERY USER. 
A little more work could fork off a watcher for each rc script to be
done.  Of course, Perl could do the same thing, perhaps even easier.
-- 
kernel, n.: A part of an operating system that preserves the
medieval traditions of sorcery and black art.
Danny
_______________________________________________
Ale mailing list
Ale at ale.org
http://www.ale.org/mailman/listinfo/ale
    
    
More information about the Ale
mailing list