Re: lauchd and svnserve
Re: lauchd and svnserve
- Subject: Re: lauchd and svnserve
- From: Roland King <email@hidden>
- Date: Wed, 24 Sep 2008 18:49:12 +0800
don't run it like that. the 'd' argument means daemon-ize and it's a
requirement of launchd that processes do NOT do that. What's happening
is the process is starting, it immediately backgrounds itself, which
means the process launchd starts dies, then launchd tries to start it
up again but it can't because there is a background daemon process
(the one you just started) hogging the socket. Eventually launchd
gives up trying to respawn it and the error messages in the console
stop, and the daemon one is still there. launchd cannot control
processes which do that.
You're also clearly trying to start it up too early, so the first few
really do actually just die and launchd starts them up again, but it
doesn't really know what it's doing.
You could run it in foreground mode by changing that '-d' to '--
foreground'. That will stop launchd going totally nuts trying to keep
starting it up again because it will stay up, and if it does fall
down, launchd will correctly start it for you again.
however a much better idea is to put it into inetd mode and only start
up on demand when someone asks for it, I don't know about you but I
don't use my repository very much. For that you need the file which
follows. That will start one in inetd mode when someone makes a
request on the svn port. In that way the process will be down most of
the time which is less strain on the server and it won't start until
someone asks for it, which means you shouldn't have all those volume
mounting issues.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd
">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>org.tigris.subversion.svnserve</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/svnserve</string>
<string>--inetd</string>
<string>--root=Volumes/Development_Current/_CodeRepository</
string>
</array>
<key>ServiceDescription</key>
<string>Subversion Standalone Server</string>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<array>
<dict>
<key>SockFamily</key>
<string>IPv4</string>
<key>SockServiceName</key>
<string>svn</string>
<key>SockType</key>
<string>stream</string>
</dict>
</array>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
</dict>
</plist>
On Sep 24, 2008, at 4:24 PM, René v Amerongen wrote:
Dear list
Not sure where to put this question, but I did see here more of
launchd questions.
I got svnserve running with the following plist.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd
">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>PathState</key>
<dict>
<key>/Volumes/Development_Current/_CodeRepository</key>
<true/>
</dict>
</dict>
<key>Label</key>
<string>subversion.svnserve</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/svnserve</string>
<string>-d</string>
<string>-r</string>
<string>/Volumes/Development_Current/_CodeRepository</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Library/Logs/Subversion_SVNserve.log</string>
</dict>
</plist>
My Volumes/Development_Current/ volume is a firewire disk and when
the plist get fired the drive isn't ready yet.
But when it comes up the svnserve starts up en works ok. Just a
second but with two or three "does not exist or is not a directory"
lines
Some questions however.
1.)While svnserve is running, in my Subversion_SVNserve.log log I see.
svnserve: Root path '/Volumes/Development_Current/_CodeRepository'
does not exist or is not a directory.
svnserve: Root path '/Volumes/Development_Current/_CodeRepository'
does not exist or is not a directory.
svnserve: Can't bind server socket: Address already in use
svnserve: Can't bind server socket: Address already in use
svnserve: Can't bind server socket: Address already in use
...
and at the console I see the Launchd log
24-09-08 10:06:36 com.apple.launchd[1] (subversion.svnserve[684])
Exited with exit code: 1
24-09-08 10:06:36 com.apple.launchd[1] (subversion.svnserve)
Throttling respawn: Will start in 10 seconds
24-09-08 10:06:46 com.apple.launchd[1] (subversion.svnserve[685])
Exited with exit code: 1
24-09-08 10:06:46 com.apple.launchd[1] (subversion.svnserve)
Throttling respawn: Will start in 10 seconds
.....
Yesterday I did have a huge PID number a little scary.
Why is it trying to start again? How can I stop that? what is wrong
with my plist?
2.) When I unmount the drive, then the svnserve keeps running. I
thought the the daemon will get killed.
However it restart when the drive is mounted back online. But how
can I get this killed when unmounting the drive.
3.) Actualy I would like to have it start at demand and kills after
10 minutes. I notice that the OnDemand key is gone in 10.5. But how
should I do it now?
4.) I did see a few sample script with ip socket info in the plist,
what is that for? Do I need that?
Thanks in advance
René
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden