以前的Linux系统都使用System V风格的 rc.d/ rc.conf rc.local等目录和文件,在开机启动时加载额外的进程。 现在Ubuntu和CentOS改用upstart(命令initctl),ArchLinux改用systemd(systemctl),除了开机启动时加载, 还能守护进程,比python写的supervisor好用多了(这是个泥菩萨,常常自己挂掉了)。
环境:CentOS (v6.3 v6.4) 先在/etc/init/下面写个.conf的配置文件,如PHP-FPM的:/etc/init/php-fpm.conf
# php-fpm
description "PHP FastCGI Process Manager"
start on (net-device-up and local-filesystems)
stop on runlevel [!2345]
env DAEMON="/usr/sbin/php-fpm -c /etc/php-fpm.conf -D"
expect fork
respawn
exec $DAEMON
nginx可以更智能一点: /etc/init/nginx.conf
# nginx
description "nginx http daemon"
start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]
env DAEMON=/usr/sbin/nginx
env PID=/var/run/nginx.pid
expect fork
respawn
respawn limit 10 5
#oom never
pre-start script
$DAEMON -t
if [ $? -ne 0 ]
then exit $?
fi
end script
exec $DAEMON
使用 initctl start/stop/restart php-fpm 来启动和关闭php进程,启动后进程被守护。 要注意的是,用别的方式启动的php-fpm进程,用initctl stop无法杀掉。
按网上说法这样就可以在系统开机时启动它们,实际上不行,得自己往/etc/rc.d/rc.local里写
千万别这样,如果有个任务卡在那里,就进不了登录图形界面了。实际上CentOS有在启动阶段使用它们,因为不满足条件
(去掉filesystem and net-device-up IFACE=lo试试),或者执行exec命令失败(比如权限问题,用exec su -s /bin/sh -c)。
对于MySQL,安装文件里提供了旧方式的服务文件,使用下面方式保证开机启动
cp /opt/mysql-5.6.10/support-files/mysql.server /etc/init.d/mysql
chkconfig enable mysql