> Normally, this should not happen if the script is properly installed as 
> a rc start and stop script. When the machine is shut down, webkit should 
> be stopped properly and the PID_FILE deleted.
>   
You are right.  I have verified ThreadedAppServer does respond to 
SIGTERM during host shutdown and deletes the PID file.  I had to 
hard-reset my OS X box a few months ago and I think I've had a PID file 
with a low process ID causing problems since then.  (I didn't have time 
to look into the problem immediately and just invoked AppServer manually 
the few times I've needed it.  This is a testing system.)

> So instead of simply testing whether a process exists, we could check 
> the process command as well and require it to be something like
> "python Launch.py ThreadedAppserver"
>
> But this would still fail if you run several Webware instances. We need 
> to check whether the process really belongs to the PID_FILE.
>   

For the reason you give, I too think this is a bad idea.

>  > Perhaps webkit should use fcntl.flock?
>
> Just so I understand properly: You suggest that the PID_FILE is created 
> with a lock (you can also use os.open for that), and then the start 
> script checks with "fuser" whether the process in the PID_FILE is the 
> same as the one that has PID_FILE locked?  That should work, but it 
> would waste a file descriptor, and I'm not sure whether fuser is 
> available everywhere.
>   

I'm not familiar with fuser, but I think you are right that os.open is 
more portable than fnctl.flock.  Therefore I'm suggesting that 
ThreadedAppServer could lock PID_FILE.  The OS will automatically 
release this lock when ThreadedAppServer exits.  Then the webkit script 
can attempt to lock PID_FILE before starting ThreadedAppServer.  If it 
fails then ThreadedAppServer must still be running.

I had not considered the loss of a file descriptor, although I don't 
think this is too high a price.

> Maybe the following would be better. It does not need any locking.
>
> PID=`cat $PID_FILE`
> if [ tr \\000 \\040 < /proc/$PID/cmdline | grep -q " -i $PID_FILE " ]
> then conclude that Webware is still running...
>   
Unfortunately OS X does not include /proc and therefore FreeBSD probably 
doesn't either.  My impression is that /proc is a relatively recent 
innovation.


    Oliver


_______________________________________________
Webware-discuss mailing list
Webware-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/webware-discuss

Reply via email to