Start Trac on Startup – Init.d Script for tracd
As part of a server move, I went on to reinstall Trac. I’ve tried to install it as FastCGI but I failed to configure the clean URLs properly. I got the clean URLs to work if the user access them, but Trac insisted on addeing trac.fcgi to the beginning of every link it generated. So I’ve decided to use the Trac standalone server, tracd.
The next problem I faced was how to start the Trac automatically upon startup. The solution was to use an init.d script for stating Trac. After some searching, I didn’t find an init.d script for tracd that were satisfactory (mostly poorly written). So I went on an wrote my own init.d script for tracd.
#!/bin/sh ### BEGIN INIT INFO # Provides: tracd # Required-Start: networking # Required-Stop: networking # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the tracd standalone Trac web server. ### END INIT INFO # (C) 2008 Guy Rutenberg <http://www.guyrutenberg.com> ## Options you should probably change ## HOSTNAME=127.0.0.1 # to which hostname should we listen # If you only want to serve one project keep this variable # empty and set the PROJECT_ENV variable ENV_PARENT_DIR=/home/guyru/trac.guyrutenberg.com PROJECT_ENV= PORT=9090 # add any additional options (such as authentication) here. If you only have one # project you should probably add -s here ADDITIONAL_OPTS= ## Options you should probably not change ## DAEMON=/usr/bin/tracd NAME=tracd DESC="web server" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME SSD="/sbin/start-stop-daemon" test -x $DAEMON || exit 1 set -e . /lib/lsb/init-functions DAEMON_OPTS="--daemonize --pidfile=$PIDFILE --port=$PORT --hostname=$HOSTNAME $ADDITIONAL_OPTS" if [ -n "$ENV_PARENT_DIR" ]; then DAEMON_OPTS="$DAEMON_OPTS --env-parent-dir=$ENV_PARENT_DIR" else DAEMON_OPTS="$DAEMON_OPTS $PROJECT_ENV" fi case "$1" in start) log_daemon_msg "Starting $DESC" $NAME if ! $SSD --start --quiet\ --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS ; then log_end_msg 1 else log_end_msg 0 fi ;; stop) log_daemon_msg "Stopping $DESC" $NAME if $SSD --stop --retry 30\ --pidfile $PIDFILE ; then rm -f $PIDFILE log_end_msg 0 else log_end_msg 1 fi ;; restart|force-reload) $0 stop [ -r $PIDFILE ] && while pidof -x $NAME |\ grep -q `cat $PIDFILE 2>/dev/null` 2>/dev/null ; do sleep 1; done $0 start ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
The script begins with a configuration section. You should go over each variable and make sure its value suits you need. The first part is configuration variables you are more likely to change. It includes:
HOSTNAME– This tellstracdon what hostname to listen. From my experience setting it to anything other than 127.0.0.1 or localhost will cause it to operate on all available hostnames. If you usetracdin conjunction withmod_proxy (this is usually the case if you have Lighttpd) you would want to leave the hostname on 127.0.0.1 so the tracdserver won't be accessed directly.ENV_PARENT_DIR- If you have multiple projects (all under then same directory) set this to the parent directory. If you only want to serve one project you should leave this empty and set the next variable.PROJECT_ENV- Set this to the project environment directory of you project if you serve only one. This variable is ignored ifENV_PARENT_DIRis set to anything but empty.PORT- This simply tellstracdon what port to listen.ADDITIONAL_OPTS- This variable allows you to pass additional parameters to thetracd. It's the place to add you authentication flags. If you have only a single project and would like to omit the project name in the url (e.g. something like http://trac.example.com) add the-sflag to this variable.
The other part of the configuration allows you to easily adjust the script to your machine. It has variables for specifying the path to the tracd executable and the paths of other things required of the correct operation of the script. In most cases you wouldn't have to change this part.
Now copy the script to /etc/init.d/trac and adjust the configuration to your needs. To enable the script on startup you should use your distro specific tools for managing the rc scripts. On fedora that means you will have to do chkconfig trac on. On Ubuntu you should do update-rc.d trac defaults.
I hope you will find the script useful. If you have any comments or suggestions regarding the script please comment.
UPDATE (13/10/2008):
Here is an version of the script for download.
UPDATE (17/2/2009):
See Starting tracd without Root Privileges at Startup for a different way to start tracd that doesn't require root privileges.







Hi, Thank you for the script,
but i get the following error:
/etc/init.d/trac: line 30: test: too many arguments
/etc/init.d/trac: line 39: syntax error near unexpected token `else’
do you have a tip?
Thank you!
AbriNation
25 Aug 08 at 12:52
Hi,
Apparently I had some escaping issue that caused characters like | and ; not to show up, hence messing up the code. I fixed it and the script should run fine now.
Thanks for reporting
Guy
25 Aug 08 at 19:08
How about a wget’able version?
boohoo
13 Oct 08 at 11:43
Hi,
I’ve added a wget’able version, see update to post.
Guy
13 Oct 08 at 17:53
Thanks for your work, Guy!
Unfortunately, it fails on FreeBSD (though I understand that most probably you haven’t targeted it): default trac binary location is different, /lib/lsb/init-functions not found, /sbin/start-stop-daemon not found.
Anyways, why don’t you try to contribute this to Trac-hacks scripts so it appears on community pages? (Trac project itself does not want to host them: http://trac.edgewall.org/ticket/4352)
Also, it would be nice to have user options (HOSTNAME, ENV_PARENT_DIR, PROJECT_ENV, PORT and ADDITIONAL_OPTS) parametrized, like in this script: http://adrenalinexp.wordpress.com/2008/03/23/freebsd-tracd-rcd-script/
Vitaly
31 Oct 08 at 16:05
Hi Vitaly,
I really didn’t think about *BSD when I wrote it (I admit I never even used one).
Creating a separate configuration file is a nice thing, I just don’t know if it worth the effort for such short script.
Guy
31 Oct 08 at 18:14
Hi Guy ,
if I normally needs the sudo command to execute the tracd standalone server. Where do I specify this in the script ?
Thanks
Shredder
9 Feb 09 at 22:55
Hi Shredder,
Init.d scripts are executed with root privileges so no need to use sudo inside the script.
Guy
9 Feb 09 at 23:56
Thank you Guy for your fast answer !
Have a nice day !
Shredder
10 Feb 09 at 02:38
nice! [IMG]http://rich-niche.info/cookie/img/smilies/happy.gif[/IMG]
http://rich-niche.info/cookie/img/smilies/happy.gif
17 Mar 09 at 02:05
[...] Start Trac on Startup – Init.d Script for tracd at Guy Rutenberg (tags: Linux ubuntu trac sysadmin startup-script) This was written by doug. Posted on Tuesday, May 19, 2009, at 9:06 pm. Filed under del.icio.us Links. Bookmark the permalink. Follow comments here with the RSS feed. Post a comment or leave a trackback. [...]
A Drop In The Stream › links for 2009-05-19
20 May 09 at 06:07