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

[经验分享] Centos手动编写service命令脚本(运行原理)

[复制链接]

尚未签到

发表于 2018-4-27 07:37:45 | 显示全部楼层 |阅读模式
Centos手动编写service命令脚本
一.动机
  虽然service命令有点老了,但是redhat和centos上面还是在继续使用着,我的VPS也是使用的centos系统,而且httpd服务是我手动编译安装的,每次启动都需要很长的执行命令,心中有了能否直接用service命令来执行的想法,然后就上网搜了些资料,现真理出来,方便以后查看。
二.知识
1.service man帮助文档:
  service(8)                                                          service(8)
  NAME
  service – run a System V init script
  SYNOPSIS
  service SCRIPT COMMAND [OPTIONS]
  service –status-all
  service –help | -h | –version
  DESCRIPTION
  service  runs a System V init script in as predictable environment as possible, removing
  most environment variables and with current working directory set to /.
  The SCRIPT parameter specifies a System V init script,  located  in  /etc/init.d/SCRIPT.
  The supported values of COMMAND depend on the invoked script, service passes COMMAND and
  OPTIONS it to the init script unmodified.  All scripts should support at least the start
  and  stop  commands.  As a special case, if COMMAND is –full-restart, the script is run
  twice, first with the stop command, then with the start command.
  service –status-all runs all init scripts, in alphabetical order, with the status  com-
  mand.
  FILES
  /etc/init.d
  The directory containing System V init scripts.
  ENVIRONMENT
  LANG, TERM
  The only environment variables passed to the init scripts.
  SEE ALSO
  chkconfig(8), ntsysv(8)
  Jan 2006                         service(8)
  (END)
  存在即合理,man帮助文档其实已经给了我们很多有用的信息,1.service是用来执行一个脚本的命令,格式为:service 脚本 命令
  2.这些脚本都放在/etc/init.d文件下。
2./var/lock目录
  很多程序需要判断是否当前已经有一个实例在运行,这个目录就是让程序判断是否有实例运行的标志,比如说xinetd,如果存在这个文件,表示已经有 xinetd在运行了,否则就是没有,当然程序里面还要有相应的判断措施来真正确定是否有实例在运行。通常与该目录配套的还有/var/run目录,用来存放对应实例的PID,如果你写脚本的话,会发现这2个目录结合起来可以很方便的判断出许多服务是否在运行,运行的相关信息等等。
  来源: <http://sunxiaqw.blog.163.com/blog/static/9906543820111184422807/>
  从这段文字基本就能判断出/var/lock目录的作用了,其实我个人的简单理解就是用来判断进程的唯一性,在/var/lock/subsys中创建一个文件,来标识进程已创建,当执行service httpd start时,脚本判断是否在/var/lock/subsys下存在相应的文件,若存在则说明进程已经在执行,无需创建。
三.脚本创建
[bash]#!/bin/bash

#chkconfig: 2345 10 90&nbsp;&nbsp;&nbsp;&nbsp; ##这一行一定要加,格式为chkconfig:#description:httpd service  
. /etc/init.d/functions&nbsp;&nbsp;&nbsp; ##functions里面有system v的环境变量设置,脚本中也需要
  
HTTPD=httpd
  
start(){
  
##ps -aux|grep -i httpd|grep -v grep&gt;/dev/null
  
if [ -f /var/lock/subsys/$HTTPD ]; then
  
echo "httpd is running…"
  
else
  
echo "httpd is starting…"
  
./opt/httpd2\.4/bin/httpd -k start
  
touch /var/lock/subsys/httpd
  
sleep 2
  
echo "httpd start OK."
  
fi
  
}
  
stop(){
  
if [ -f /var/lock/subsys/$HTTPD ];then
  
echo "Stopping httpd …"
  
./opt/httpd2\.4/bin/httpd -k stop
  
rm -f&nbsp; /var/lock/subsys/httpd
  
sleep 2
  
echo "httpd stop OK."
  
else
  
echo "httpd is not running…"
  
fi
  
}
  
restart(){
  
stop
  
start
  
}
  
case "$1" in
  
start)
  
start;;
  
stop)
  
stop;;
  
restart)
  
restart;;
  
*)
  
echo $"Usage: ${HTTPD} {start|stop|restart}"
  
exit 1 ;;
  
esac
[/bash]

  本实验关闭httpd是用的httpd自带命令,也可以使用killproc httpd来替代./opt/httpd2\.4/bin/httpd -k stop命令。此service启动脚本可以加入chkconfig中,使用chkconfig –add httpd即可加入。
参考
  http://www.linuxso.com/command/chkconfig.html
  http://sunxiaqw.blog.163.com/blog/static/9906543820111184422807/
  http://linux.about.com/od/lsa_guide/a/gdelsa20.htm
  http://serverfault.com/questions/29788/what-is-needed-for-a-linux-service-to-be-supported-by-chkconfig

运维网声明 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-452464-1-1.html 上篇帖子: centos7下基于xampp的testlink安装部署 下篇帖子: Centos 6.6 的FFmpeg简单安装文档
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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