PHP-FPM and nginx upstart scripts
Upstart is becoming the de-facto standard for everything in Ubuntu, and I do enjoy it's process management and re-spawning capabilities.
(Actually, before PHP-FPM I used to use upstart jobs to su - $user php-cgi -b $port :))
These are VERY simple but effective scripts, and would actually be beefed up to be more intelligent (chaining nginx to start after PHP-FPM for example. However, if you do not need PHP, then that's a useless chain. So I kept it simple. I suppose you could add a short delay to start nginx then...)
Note: make sure PHP-FPM is set to daemonized = yes.
Second note: this works for PHP 5.2.x w/ the PHP-FPM patch, on Ubuntu Lucid Lynx (10.04) - anything else YMMV. I am not using PHP-FPM w/ PHP 5.3 yet since I have no environments that I know will support 5.3 code. When I finally get one, I will look for the same opportunity.
/etc/init/nginx.conf:
description "nginx" start on (net-device-up and local-filesystems) stop on runlevel [016] expect fork respawn exec /usr/sbin/nginx
/etc/init/php-fpm.conf:
description "PHP FastCGI Process Manager" start on (net-device-up and local-filesystems) stop on runlevel [016] expect fork respawn exec /usr/local/bin/php-cgi --fpm --fpm-config /etc/php-fpm.conf
Once you've done this you can remove all the /etc/init.d/php-fpm, /etc/init.d/nginx and /etc/rc?.d/[K,S]??php-fpm and /etc/rc?.d/[K,S]??nginx symlinks and files. This takes care of all of that.
Feel free to comment and leave better tips, tricks and ideas!
Note: this does not do anything about logrotate signals, graceful reload signals, etc.
hey thanks, just what i needed to get started with upstart ...
Thanks Michael, so simple it can't be legal! 🙂
Works a treat, upstart really is a nice thing - will be good to see this taking over from init.d/ in the future.
Can confirm these scripts work perfectly with nginx & PHP 5.3.3 (with FPM/APC) under Ubuntu 10.04.
@Peter Mescalchin
My main concern is that it doesn't factor in the USR1, USR2, etc. signals that nginx, PHP-FPM and other daemons use for log rotation, graceful reloading, etc. Upstart is cool, but right now it has that limitation, at least from what I can tell. I tried starting a thread on the Upstart mailing list, and it went nowhere.