Mail Archives: cygwin-apps/2001/05/17/17:15:00
[I originally sent the following message directly to Corinna, who
asked me to send it to cygwin-apps for more general discussion. So
here it is...]
----- Forwarded message from Fred Yankowski <fred AT ontosys DOT com> -----
Corinna,
I somehow overlooked Cygrunsrv until now. Although I've been working
on adding functionality into the PostgreSQL program to run as an NT
service -- much as is done in inetd and ipc-daemon -- I'm tempted to
use Cygrunsrv instead as a wrapper. However, the PostgreSQL case has
several needs that are not currently handled by Cygrunsrv, AFAICT:
1. Some way to send specific signals to the daemon process to stop it
in both the stop and shutdown cases.
For postgres I want to send SIGINT in both cases, causing postgres
do a bit of cleanup before shutting down. SIGTERM also shuts down
the postgres instance, but in a way that can get hung up if there
are any clients still attached.
One way to implement this would be to run a user-specified
program/script in the event of the SERVICE_CONTROL_STOP and
SERVICE_CONTROL_SHUTDOWN events, passing it "stop" or "shutdown"
and possibly the PID of the daemon process. Or Cygrunsrv could
send signals directly, with values parameterized via the registry.
2. Ignore SIGHUP.
For the service wrapper to survive long enough during NT shutdown
to send a signal to the underlying daemon process, I've found that
I need to ignore SIGHUP in each thread of the service wrapper
process. (Postgres itself also needs to ignore SIGHUP in this
case, which is an ugly Cgywin-only hack to its code.)
3. Direct stdout/stderr to a logfile.
Postgres provides no command-line option for directing output to a
logfile, depending on some shell wrapper to do this if necessary.
Perhaps the service could actually call such a shell wrapper
around postgres, but if it calls the postgres program directly
(which I'd prefer, to avoid yet-another background process) I've
found it essential to capture the output into a logfile by doing
freopen() in the service wrapper before executing the daemon
program. Line-buffering of the logged streams helps when calling
the program directly, so that a "tail -f" on the logfile gets each
line right away; but I don't know if this buffering mode persists
over fork/exec -- I suppose not.
4. Specify dependency on other services.
For postgres, ipc-daemon must be running first or postgres will
fail to start up.
Do these seem like reasonable features to add to cygrunsrv?
I'm quite interested, because this could drastically change my
approach to making postgres an NT service. I've actually got it
working pretty well now -- thanks in good part to your recent work on
cygwin_recv() -- but it seems a shame to have all that
service-management code in the postgres program itself.
I'm willing to help incorporate/patch such features into cygrunsrv, if
that matters.
On Thu, May 17, 2001 at 10:00:56AM +0200, Corinna Vinschen wrote:
> I have updated cygrunsrv to version 0.92-2.
--
Fred Yankowski fred AT OntoSys DOT com tel: +1.630.879.1312
Principal Consultant www.OntoSys.com fax: +1.630.879.1370
OntoSys, Inc 38W242 Deerpath Rd, Batavia, IL 60510, USA
----- End forwarded message -----
- Raw text -