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.
more info on the above issue...
"Most daemons that implement such things have their own control program too.... apachectl .. mysqladmin.. pg_ctl .."
https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/605007