misc/96766: run_rc_command doesn't work for Python scripts
Richard Brooksby
rb at ravenbrook.com
Thu May 4 11:50:18 UTC 2006
>Number: 96766
>Category: misc
>Synopsis: run_rc_command doesn't work for Python scripts
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu May 04 11:50:16 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator: Richard Brooksby
>Release: 6.0-RELEASE-p6
>Organization:
Ravenbrook Limited <http://www.ravenbrook.com/>
>Environment:
FreeBSD raven.ravenbrook.com 6.0-RELEASE-p6 FreeBSD 6.0-RELEASE-p6 #0: Tue Apr 11 13:52:12 BST 2006 root at coot.verity-networks.com:/usr/obj/usr/src/sys/GENERIC i386
>Description:
The run_rc_command from /etc/rc.subr is intended to lift out the repetetive parts of starting and stopping system daemons. However, it fails to work on Python scripted daemons which start with the usual #! line:
#!/usr/bin/env python
Although it will start a daemon, it can't stop, restart, or report its status. This gives failures like:
raven# sh /usr/local/etc/rc.d/py-spamass-milter.sh status
py_spamass_milter is not running.
even though
raven# ps -p `cat /var/run/spamd/py-spamass-milter.pid`
PID TT STAT TIME COMMAND
75992 ?? Ss 1:55.69 python /usr/local/sbin/py-spamass-milter -p /var/run/spamd/py-spamass-milter.sock
Setting the "interpreter" variable before calling run_rc_command doesn't help. I think the run_rc_command function might be assuming that the interpreter will appear immediately after the #! in the script itself. This won't just affect Python: there are other systems which use "env" in the same way.
>How-To-Repeat:
Create a simple daemon in a Python executable script, and a corresponding file in /usr/local/etc/rc.d, then try to stop or restart the daemon.
>Fix:
The rc_command function does a lot of work to make sure it's not going to kill the wrong process, but its assumptions about what will come out of "ps" are wrong, and probably too paranoid? Perhaps a simpler check would be fine.
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list