免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1485 | 回复: 0
打印 上一主题 下一主题

Linux中将memcached注册为系统服务 . [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-23 14:17 |只看该作者 |倒序浏览
Linux中将memcached注册为系统服务 .









引言:

memcached是优秀的开源高性能分布式内存对象缓存系统。在Linux系统下编译安装后没有自动注册为系统服务。另外由于memcached基于libevent库,该库默认的编译安装位置为/usr/local/lib目录,该目录又不是多数linux发行版的默认库加载路径。因此在执行memcached之前需要修改默认加载路径,将该路径包含进去。虽然只需要设置一次但毕竟要设置,很麻烦。如果你又希望存放在该路径下的库不被程序自动搜寻到,就不能使用该方法。那么怎么才能有个完全的方法来解决呢?



解决方法:

既然memcached没有被注册为系统服务,那我们手动地去注册。注册系统服务需要编写启动脚本,一般要实现三个方法,分别是:start、stop和restart。并且该脚本要放置在/etc/init.d/目录中。下面是我写的服务脚本(脚本需要以root权限编写):
  1. view plaincopy to clipboardprint?
  2. 01.#chkconfig: 345 60 60   
  3. 02.#description: This Service is from memcached \   
  4. 03.# which is high performance object cache system   
  5. 04.#!/bin/sh   
  6. 05.export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH  
  7. 06.memcached_process_name="memcached"  
  8. 07.start(){  
  9. 08.  echo "Starting Memcached Service with Port 11211"  
  10. 09.  # note that the character ` is not single quotation, \   
  11. 10.  # It is the left character of "1" key in your keyboard   
  12. 11.  memcached_pid_list=`pidof $memcached_process_name`  
  13. 12.  if test -n "$memcached_pid_list"  
  14. 13.  then  
  15. 14.    echo "Fail To Launch Memcached, Since It Has Already Started"  
  16. 15.    exit 1  
  17. 16.  else  
  18. 17.    echo "Launching memcached with MaxMemory 64MB"  
  19. 18.    /usr/local/bin/memcached -l 0.0.0.0 -p 11211 -m 64 -d -u root  
  20. 19.    echo "Launch Memcached Successfully"  
  21. 20.    exit 0  
  22. 21.  fi;  
  23. 22.}  
  24. 23.  
  25. 24.stop(){  
  26. 25.  echo "Stopping Memcached Service..."  
  27. 26.  memcached_pid_list=`pidof $memcached_process_name`  
  28. 27.  if test -n "$memcached_pid_list"  
  29. 28.  then  
  30. 29.    echo "Find Memcached Process(es), Start To End Them"  
  31. 30.    kill -9 $memcached_pid_list  
  32. 31.    if test "$?" = "0"  
  33. 32.    then  
  34. 33.      echo "Success to Terminate All Memcached Processes"  
  35. 34.    else  
  36. 35.      echo "Can Not Terminate All Memcached Processes"  
  37. 36.    fi;  
  38. 37.    echo {1}quot;Finished Stopping Memcached Service"  
  39. 38.    exit 0  
  40. 39.  else  
  41. 40.    echo "Can Not Find Any Memcached Process, Fail To Stop Service"  
  42. 41.    exit 1  
  43. 42.  fi;  
  44. 43.}  
  45. 44.  
  46. 45.  
  47. 46.case "$1" in  
  48. 47.  start)  
  49. 48.     start  
  50. 49.     ;;  
  51. 50.  stop)  
  52. 51.     stop  
  53. 52.     ;;  
  54. 53.  restart)  
  55. 54.     stop  
  56. 55.     #sleep 3 seconds to wait for process's exit   
  57. 56.     sleep 3  
  58. 57.     start  
  59. 58.     ;;  
  60. 59.  *)  
  61. 60.     echo {1}quot;Usage:$0 {start|stop|restart}"  
  62. 61.     exit 2  
  63. 62.esac  
  64. #chkconfig: 345 60 60
  65. #description: This Service is from memcached \
  66. # which is high performance object cache system
  67. #!/bin/sh
  68. export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
  69. memcached_process_name="memcached"
  70. start(){
  71.   echo "Starting Memcached Service with Port 11211"
  72.   # note that the character ` is not single quotation, \
  73.   # It is the left character of "1" key in your keyboard
  74.   memcached_pid_list=`pidof $memcached_process_name`
  75.   if test -n "$memcached_pid_list"
  76.   then
  77.     echo "Fail To Launch Memcached, Since It Has Already Started"
  78.     exit 1
  79.   else
  80.     echo "Launching memcached with MaxMemory 64MB"
  81.     /usr/local/bin/memcached -l 0.0.0.0 -p 11211 -m 64 -d -u root
  82.     echo "Launch Memcached Successfully"
  83.     exit 0
  84.   fi;
  85. }

  86. stop(){
  87.   echo "Stopping Memcached Service..."
  88.   memcached_pid_list=`pidof $memcached_process_name`
  89.   if test -n "$memcached_pid_list"
  90.   then
  91.     echo "Find Memcached Process(es), Start To End Them"
  92.     kill -9 $memcached_pid_list
  93.     if test "$?" = "0"
  94.     then
  95.       echo "Success to Terminate All Memcached Processes"
  96.     else
  97.       echo "Can Not Terminate All Memcached Processes"
  98.     fi;
  99.     echo {1}quot;Finished Stopping Memcached Service"
  100.     exit 0
  101.   else
  102.     echo "Can Not Find Any Memcached Process, Fail To Stop Service"
  103.     exit 1
  104.   fi;
  105. }


  106. case "$1" in
  107.   start)
  108.      start
  109.      ;;
  110.   stop)
  111.      stop
  112.      ;;
  113.   restart)
  114.      stop
  115.      #sleep 3 seconds to wait for process's exit
  116.      sleep 3
  117.      start
  118.      ;;
  119.   *)
  120.      echo {1}quot;Usage:$0 {start|stop|restart}"
  121.      exit 2
  122. esac
复制代码
编写完毕后。对其赋予755权限,即rwxr-xr-x(文件所有者具有读写执行权限,同组用户具有只读和执行权限,其他用户具有只读和执行权限):
  1. view plaincopy to clipboardprint?
  2. 01.[root@lxp2 init.d]# chmod 755 memcached  
  3. [root@lxp2 init.d]# chmod 755 memcached
复制代码
脚本中指定了memcached监听本地所有IP,端口为TCP的11211端口,默认为其分配64M的内存,如果想修改这些值,需要修改上面的配置文件start函数的如下两行:
  1. view plaincopy to clipboardprint?
  2. 01.echo "Launching memcached with MaxMemory 64MB"  
  3. 02./usr/local/bin/memcached -l 0.0.0.0 -p 11211 -m 64 -d -u root  
  4.     echo "Launching memcached with MaxMemory 64MB"
  5.     /usr/local/bin/memcached -l 0.0.0.0 -p 11211 -m 64 -d -u root
复制代码
具体参数意义请参阅memcache的手册man memcached。

手动启动、停止和重启服务命令为
  1. service memcached start

  2. service memcached stop

  3. service memcached restart
复制代码
虽然编写了脚本,但是现在还不能让系统自动加载服务,接下来:

在上述脚本中注意开始的三行:
  1. view plaincopy to clipboardprint?
  2. 01.#chkconfig: 345 60 60   
  3. 02.#description:This Service is from memcached \   
  4. 03.# which is high performance object cache system  
  5. #chkconfig: 345 60 60
  6. #description:This Service is from memcached \
  7. # which is high performance object cache system
  8. #chkconfig和#description
复制代码
是必须要有的。

chkconfig后的第一段数字:345,表示在那些运行界别中会开启此服务。当Linux系统以指定的运行级别来运行时,进入系统会关闭系统时会自动调用服务的start和stop。

运行级别有7个等级:
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

由于memcached在工作时需要使用网络连接,所以最低级别要在3才能正常工作。

chkconfig后的第二段数字:60,表示该服务在系统启动后的脚本运行顺序。这样来说可能都看不懂。举个例子,假如一个服务被设置为系统运行等级3的时候启动,则服务管理工具会在/etc/rc3.d目录中创建该服务相关脚本的映射,映射的名称即为S[数字][服务名]。上面的脚本安装好服务后会在/etc/rc3.d、/etc/rc4.d、/etc/rc5.d中分别创建名称为S60memcached的映射,映射目标文件为/etc/init.d/memcached(即本文件)。S表示Startup,即“启动”。系统在启动后就已知在以何种级别运行,因此系统会试图执行对应级别的目录内所有脚本,并加以start参数。至于执行的顺序,就靠S后边的编号了。编号数值越大越后被执行(00~99)。

chkconfig后的第三段数字:60,和第二段数字的功能相似,但是该数字表示系统关闭后的脚本运行顺序。还是刚才的例子,假如一个服务被设置为系统运行等级3的时候启动,系统关闭的之前理所当然也要关闭它。则服务管理工具会在/etc/rc3.d目录中创建该服务相关脚本的映射,映射的名称即为K[数字][服务名]。上面的脚本安装好服务后会在/etc/rc3.d、/etc/rc4.d、/etc/rc5.d中分别创建名称为K60memcached的映射,映射目标文件为/etc/init.d/memcached(即本文件)。K表示Kill,即“杀死”。系统在关闭之前就已知在以何种级别运行的,因此系统会试图执行对应级别的目录内所有脚本,并加以stop参数。至于执行的顺序,就靠K后边的编号了。编号数值越小越后被执行(99~00)。

要想让服务随系统启动,需要安装服务:
  1. view plaincopy to clipboardprint?
  2. 01.[root@lxp2 init.d]# chkconfig --add memcached  
  3. [root@lxp2 init.d]# chkconfig --add memcached
复制代码
此时查看系统的服务中就会有自己注册的服务了:
  1. view plaincopy to clipboardprint?
  2. 01.[root@lxp2 init.d]# chkconfig --list  
  3. 02....  
  4. 03.mdmpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off  
  5. 04.memcached       0:off   1:off   2:off   3:on    4:on    5:on    6:off  
  6. 05.messagebus      0:off   1:off   2:off   3:on    4:on    5:on    6:off  
  7. 06....  
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP