周梦康 发表于 2014-03-30 3026 次浏览 标签 : Linux

做自启动可以有两种方式:一种是把启动或执行命令添加到/etc/rc.d/rc.local文件中,另一种是注册为系统服务,通过chkconfig来配置开机启动。

比如我们的 web 服务器,需要在开机的时候启动一些服务,比如nginx,php,svnserve,做一些网络挂载。

为了图方便省事,我们可能会直接选择在/etc/rc.d/rc.local里面添加启动脚本

$ cat /etc/rc.d/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

mount -t cifs -o username=www,password=www //192.168.10.173/images /data/images

/usr/local/webserver/php/sbin/php-fpm
/usr/local/webserver/nginx/sbin/nginx 

/usr/sbin/gearmand -uroot -d -L 192.168.10.111 -p 7005

/usr/local/webserver/redis-2.4.10/src/redis-server /data/redis/conf/6370_feed_0.conf

/usr/local/coreseek/bin/searchd -c /data/sphinx/conf/feed.conf

svnserve -d --listen-port 12345 -r /data/svn/

# ============ 腾讯云的监控 ============
/usr/local/agenttools/agent/startagent.sh >/dev/null 2>&1 
/usr/sbin/ntpdate ntpupdate.tencentyun.com >/dev/null 2>&1

#secu-tcs-agent bootstart, install at Mon Oct 21 17:02:42 CST 2013.
/usr/local/sa/agent/secu-tcs-agent-mon-safe.sh > /dev/null 2>&1
#secu_agent init monitor, install at Thu May 22 11:13:11 CST 2014
/usr/local/sa/agent/init_check.sh  > /dev/null 2>&1
cd /usr/local/TsysAgent/bin && ./start.sh
cd /usr/local/TsysAgent/bin && ./start_proxy.sh

这样添加起来似乎很方便,但是一旦多了,就显得很乱。个人觉得在/etc/rc.d/rc.local里面应该只存放一些简单的脚本,比如腾讯云的这些监控脚本,网络挂载命令。而类似于nginx,mysql,php这样的服务,如果可以将其注册为系统服务,那样使用和管理起来也更加方便。

能够使用service命令进行操作的,就是已经注册成为linux的系统服务了。

要把一个程序注册成系统服务,首先得给出一个供service命令调用的脚本文件放到目录/etc/rc.d/init.d/中去。

/etc/rc.d/init.d/php-fpm为例,给该php-fpm配置service php-fpm {start|stop|force-quit|restart|reload|status}命令,然后通过chkconfig添加到自启动

chkconfig --add php-fpm
chkconfig --level 2345 php-fpm on

这个命令是设置在2、3、4、5运行级别下php-fpm服务会自启动。

记录下其自动启动的原理,执行完上面的操作之后,会在/etc/rc.d/目录下的rc2.d,rc3.d,rc4.d,rc5.d目录中都添加一个Sxxphp-fpm的软连接,我本机是S50php-fpm

[root@VM_132_97_centos rc3.d]# pwd
/etc/rc.d/rc3.d
[root@VM_132_97_centos rc3.d]# ll -al|grep php-fpm
lrwxrwxrwx  1 root root   17 2015-09-23 13:33 S50php-fpm -> ../init.d/php-fpm

而这个文件以S开头,也就标识着,系统在启动时,会给/etc/init.d/php-fpm传递一个start的参数。这样就启动了。

开启启动实战篇 设置 redis 开机自启动

评论列表