Socket activation for FastCGI with systemd

Published on Thu 26 July 2012. Filed under . Tags .

The server hosting this blog runs Parabola GNU/Linux-libre with systemd. The HTTP daemon I use is nginx, it serves several domains with Python software connected to it via FastCGI (using MoinMoin as example, it handled a wiki this article was migrated from). Since nginx doesn’t start FastCGI processes on its own and I don’t want to use another daemon for this, I decided to use systemd socket activation to control the FastCGI process. (I’m not discussing the choice of software described here, most reasons I have to use it are unrelated to this issue and there are probably better choices for your use.)

I’ve configured nginx to use the /srv/www/ socket.

Mostly as documented in the manual, this unit describes the socket:



I put it in /etc/systemd/system/

The Accept=false line is the reason for FastCGI: the service (mtjmwiki.service) is started on first request and used for the following requests, unlike with Accept=true that would start it separately for each request. Only the second option is supported with CGI and some older servers (it was typically done via inetd).

The service unit is similarly simple:



I wrote it to /etc/systemd/system/mtjmwiki.service. The /srv/www/ script is /usr/share/moin/server/moin.cgi adapted to use my paths.

The StandardInput=socket line makes the MoinMoin process get the socket used as specified by the FastCGI protocol. (Without this line it would assume that it’s using CGI.)

Starting the socket units and accessing the wiki has shown that this worked.