设为首页 收藏本站
查看: 1180|回复: 0

[经验分享] Linux中将memcached注册为系统服务

[复制链接]

尚未签到

发表于 2015-11-18 15:05:42 | 显示全部楼层 |阅读模式
  引言:
  memcached是优秀的开源高性能分布式内存对象缓存系统。在Linux系统下编译安装后没有自动注册为系统服务。另外由于memcached基于libevent库,该库默认的编译安装位置为/usr/local/lib目录,该目录又不是多数linux发行版的默认库加载路径。因此在执行memcached之前需要修改默认加载路径,将该路径包含进去。虽然只需要设置一次但毕竟要设置,很麻烦。如果你又希望存放在该路径下的库不被程序自动搜寻到,就不能使用该方法。那么怎么才能有个完全的方法来解决呢?
  
  解决方法:
  既然memcached没有被注册为系统服务,那我们手动地去注册。注册系统服务需要编写启动脚本,一般要实现三个方法,分别是:start、stop和restart。并且该脚本要放置在/etc/init.d/目录中。下面是我写的服务脚本(脚本需要以root权限编写):
  # chkconfig: 345 60 60
# description:  The memcached daemon is a network memory cache service.
# processname: memcached
#!/bin/sh
# Source function library.
. /etc/rc.d/init.d/functions
PORT=11211
USER=root
MAXCONN=1024
CACHESIZE=5120
OPTIONS=""
CACHE_HOME=/usr/local/memcached/bin
# Check that networking is up.
if [ "$NETWORKING" = "no" ]
then
exit 0
fi
RETVAL=0
prog="memcached"
start () {
echo -n $"Starting $prog: "
# insure that /var/run/memcached has proper permissions
chown $USER $CACHE_HOME/memcached
daemon $CACHE_HOME/memcached -d -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -P $CACHE_HOME/memcached.pid $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}
stop () {
echo -n $"Stopping $prog: "
killproc memcached
RETVAL=$?
echo
if [ $RETVAL -eq 0 ] ; then
rm -f /var/lock/subsys/memcached
rm -f /var/run/memcached.pid
fi
}
restart () {
stop
start
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status memcached
;;
restart|reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/memcached ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
exit 1
esac
exit $?


  编写完毕后。对其赋予755权限,即rwxr-xr-x(文件所有者具有读写执行权限,同组用户具有只读和执行权限,其他用户具有只读和执行权限):

[iyunv@lxp2 init.d]# chmod 755 memcached
  脚本中指定了memcached监听本地所有IP,端口为TCP的11211端口,默认为其分配64M的内存,如果想修改这些值,需要修改上面的配置文件start函数的如下两行:

    echo "Launching memcached with MaxMemory 64MB"
/usr/local/bin/memcached -l 0.0.0.0 -p 11211 -m 64 -d -u root

  具体参数意义请参阅memcache的手册man memcached。
  手动启动、停止和重启服务命令为
  service memcached start
  service memcached stop
  service memcached restart
  虽然编写了脚本,但是现在还不能让系统自动加载服务,接下来:
  在上述脚本中注意开始的三行:
  # chkconfig: 345 60 60
# description:  The memcached daemon is a network memory cache service.
# processname: memcached
  #chkconfig和#description是必须要有的。
  chkconfig后的第一段数字:345,表示在那些运行界别中会开启此服务。当Linux系统以指定的运行级别来运行时,进入系统会自动调用服务的start;当Llinux系统以非指定的运行级别来运行时,进入系统后自动调用服务的stop来阻止服务启动。
  运行级别有7个等级:

等级0表示:表示关机

等级1表示:单用户模式

等级2表示:无网络连接的多用户命令行模式

等级3表示:有网络连接的多用户命令行模式

等级4表示:不可用

等级5表示:带图形界面的多用户模式

等级6表示:重新启动
  由于memcached在工作时需要使用网络连接,所以最低级别要在3才能正常工作。
  chkconfig后的第二段数字:60,表示该服务在系统进入指定运行级别后的启动顺序。这样来说可能看不懂。举个例子,上面的脚本被设置为3、4、5级别启用,则服务管理工具会在/etc/rc3.d、/etc/rc4.d、/etc/rc5.d以及/etc/rc.d/rc3.d、/etc/rc.d/rc4.d、/etc/rc.d/rc5.d中分别创建名称为S60memcached的映射(命名规则:S[数字][服务名]。S表示Startup,即“启动”),映射的目标为/etc/init.d/memcached(即本文件)。系统在启动后就已知在以何种级别运行,因此系统会试图执行对应级别的目录内所有以S开头的脚本,并且加上start参数。至于执行的顺序,就靠S后边的编号了。编号数值越大越后被执行(00~99)。
  chkconfig后的第三段数字:60,表示该服务在系统进入非指定运行等级后的关闭顺序。这样来说可能还是看不懂。还是上面的例子,上面的脚本被设置为3、4、5级别启用,Linux一共有7个运行级别。则服务管理工具会在余下的/etc/rc0.d、/etc/rc1.d、/etc/rc2.d、/etc/rc6.d以及/etc/rc.d/rc0.d、/etc/rc.d/rc1.d、/etc/rc.d/rc2.d、/etc/rc.d/rc6.d中分别创建名称为K60memcached的映射(命名规则:K[数字][服务名]。K表示Kill,即“杀死”),系统在启动后就已知在以何种级别运行,系统除了会执行对应级别的目录内所有以S开头的脚本外,还会执行以K开头的脚本,但是对于这样的脚本会加上stop参数来执行。至于执行的顺序,就靠K后边的编号了。编号数值越小越后被执行(99~00)。
  要想让服务随系统启动,需要安装服务:

[iyunv@lxp2 init.d]# chkconfig --add memcached
  此时查看系统的服务中就会有自己注册的服务了:

[iyunv@lxp2 init.d]# chkconfig --list
...
mdmpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
memcached       0:off   1:off   2:off   3:on    4:on    5:on    6:off
messagebus      0:off   1:off   2:off   3:on    4:on    5:on    6:off
...
  


  (2011年11月23日补充)
  如果你使用的是Red Hat系列的Linux发行版(包括Red Hat Enterprise Linux、CentOS和Fedora),并且安装了图形化界面,在系统自带的服务配置工具(Service Configuration)中可以直接看到当前已安装的各项服务:
DSC0000.gif
  下面我们选中一项系统默认安装的acpid服务,看到右边有status区域,表示当前服务的状态。 DSC0001.gif
  而如果我们选择自己写的memcached服务项,在这一栏显示的是:Usage:/etc/init.d/memcached {start|stop|restart}。
  根据我的尝试,需要在脚本中实现可处理status参数。对于这个服务配置工具来说,启动时会向所有服务脚本调用带status参数的命令。例如:service memcached status。然后拦截标准输出,并将输出文本放于此区域。只要你根据自己的需要实现status参数的处理就可以了。
  至于pid表示的是进程ID。在Linux系统中可以通过读取pid文件来获取该值。memcached支持在启动后生成pid文件。方法是在启动参数后加入:
  -P [pid文件]
  即可。例如:memcached -l 0.0.0.0 -p 11211 -u root -P /usr/local/bin/memcached.pid。
  
  参考文献:
  chkconfig添加脚本,http://www.nginxs.com/linux/183.html
  Linux下chkconfig命令详解,http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796873.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140810-1-1.html 上篇帖子: ruby元编程的首次尝试和 memcached的使用 下篇帖子: PHP & memcached
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表