启动一些程序服务的时候,有时候直接去程序的bin目录下去执行命令,有时候利用service启动。

  比如启动mysql服务时,大部分喜欢执行service mysqld start。当然也可以去mysql下执行bin命令带上几个参数什么的。

  那么service是啥呢?linux可以man一下,看出来就是去/etc/init.d下执行了可执行的shell脚本。

service执行的服务脚本都是在/etc/init.d目录下,各个程序下脚本里执行的命令仍然是在各个bin下。

这样我们也可以在这个目录下写一个shell,模仿这些程序来个。

先写一个简单到爆炸的service启动脚本。

# cd /etc/init.d

# vi haha     #这个脚本名字叫haha

#!/bin/shecho '$0='$0     '$1='$1  start(){echo 'ls'cd ~ && ls
}stop(){echo 'll'cd ~ && ls -l
}case "$1" in "start")start
;;"stop")stop
;;esac

给这个脚本的执行权限比如 # chmod +x haha

执行这个:

# service haha start

# service haha stop

可以看到脚本里输出了一下$0,$1

$0=/etc/init.d/haha

$1=start 或者 stop,就是haha脚本的参数

然后start和stop执行了非常简单的命令~

例子就是这样,其他的脚本无非就是去执行了它自己命令包的命令

有时间可以分析下php-fpm的service命令方式的脚本:

#! /bin/sh
#
# chkconfig: - 84 16
# description:    PHP FastCGI Process Manager
# processname: php-fpm
# config: /etc/php-fpm.conf
# config: /etc/sysconfig/php-fpm
# pidfile: /var/run/php-fpm/php-fpm.pid
#
### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: start and stop PHP FPM
# Description: PHP FastCGI Process Manager
### END INIT INFO# Standard LSB functions
#. /lib/lsb/init-functions# Source function library.
. /etc/init.d/functions      #圆点.表示引入这个文件。 加载函数库文件,比如下面的daemon,killproc,status都是这个文件里的# Check that networking is up.
. /etc/sysconfig/network     #加载网卡情况文件, 比如下面的"$NETWORKING" = "no"# Additional environment file
if [ -f /etc/sysconfig/php-fpm ]; then    #加载这个文件,是否有额外的配置信息. /etc/sysconfig/php-fpm
fiif [ "$NETWORKING" = "no" ]
thenexit 0
fiRETVAL=0    #返回值 初始化
prog="php-fpm"  #程序名称
pidfile=${PIDFILE-/var/run/php-fpm/php-fpm.pid}  # $(a-b)这种表达方式表示,如果a存在,那么就返回$a,否则就返回$b。PIDFILE就表示可能是上面加载文件/etc/sysconfig/php-fpm里的变量。   -- pidfile,存放一个进程号pid
lockfile=${LOCKFILE-/var/lock/subsys/php-fpm}   start () {echo -n $"Starting $prog: "  # echo -n  -n表示不换行dir=$(dirname ${pidfile})[ -d $dir ] || mkdir $dir    # 不存在pid文件的目录则创建daemon --pidfile ${pidfile} /usr/sbin/php-fpm --daemonize     #执行php-fpm命令,这个最重要的RETVAL=$?   #获取上一条命令的执行返回值echo   #表示换行[ $RETVAL -eq 0 ] && touch ${lockfile}   # 如果启动成功,生成一个lockfile文件
}
stop () {echo -n $"Stopping $prog: "killproc -p ${pidfile} php-fpm    # 停掉程序 killproc的函数就在文件头处引入的/etc/init.d/functions文件RETVAL=$?echoif [ $RETVAL -eq 0 ] ; thenrm -f ${lockfile} ${pidfile}fi
}restart () {stopstart
}reload () {echo -n $"Reloading $prog: "if ! /usr/sbin/php-fpm --test ; thenRETVAL=6echo $"not reloading due to configuration syntax error"failure $"not reloading $prog due to configuration syntax error"elsekillproc -p ${pidfile} php-fpm -USR2    # 这里关键的是信号USR2,这个信号告诉是平滑重载所有worker进程并重新载入配置和二进制模块;这就是reload和restart的区别RETVAL=$?fiecho
}# See how we were called.
case "$1" instart)start;;stop)stop;;status)status -p ${pidfile} php-fpmRETVAL=$?;;restart)restart;;reload|force-reload)reload;;configtest)/usr/sbin/php-fpm --testRETVAL=$?;;condrestart|try-restart)[ -f ${lockfile} ] && restart || :;;*)echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart|configtest}"RETVAL=2;;
esacexit $RETVAL

mysql的相关启动服务编写:https://blog.51cto.com/oldboy/2124950

转载于:https://www.cnblogs.com/applelife/p/10496210.html

linux下service+命令和直接去执行命令的区别,怎么自己建立一个service启动相关推荐

  1. linux执行指定程序的命令,linux 下使用指定的用户来执行命令

    有时间,我们需要在开机的时候执行一些特定的程序或都脚本,因为涉及到安全主面的问题,所以又不想用root来执行,那怎样办呢. 经过查看 su 的帮助提示,发现: [root@redhat6 ~]# su ...

  2. Linux下临时以非root身份执行命令

    有时会遇到linux下的某些命令不能以root身份运行,比如vlc命令是不能以root身份运行的.这时,如果不想切换到非root身份并且执行完了以后再切换回来,可以在root下这样做: su yasi ...

  3. linux 骇客帝国脚本,Linux下,那些让人惊叹的命令执行效果

    Linux下,那些让人惊叹的命令执行效果 之前介绍过linux常用命令一文,接下来我们来一起学习一下linux里好玩的命令作者:luckyw2016-12-08 18:23 之前介绍过linux常用命 ...

  4. Linux下ps查找进程用kill终止命令

    Linux下ps查找进程用kill终止命令<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offic ...

  5. Redis第二集:Linux下安装Redis和测试,包含命令代码和问题处理办法,超详细版

    Redis第二集:Linux下安装Redis和测试,包含命令代码和问题处理办法,超详细版 一.资源 Linux下的Redis的下载地址 二.安装与测试 上传至自己的Linux平台 解压安装包 tar ...

  6. 查看linux的用户 7.2,linux下查看用户登入系统相关命令及编写脚本(七)

    linux下查看用户登入系统相关命令及编写脚本(七) 查看用户登入系统日志 1.w 显示谁登入并正在做什么事 2.who 显示谁登入 -r:显示系统运行级别 3.sleep 睡眠命令(sleep 5 ...

  7. Linux下必须知道的11个网络命令

    Linux下必须知道的11个网络命令 作者:佚名 字体:[增加 减小] 来源:互联网 时间:03-06 15:54:29 我要评论 无论你是要下载文件.诊断网络问题.管理网络接口,还是查看网络的统计数 ...

  8. linux 让暂停的进程恢复,Linux 下进程的挂起和恢复命令

    本文给大家介绍进程的挂起及恢复命令,具体内容如下所示: #ctrl+z:挂起,程序放到后台,程序没有结束. #jobs:查看被挂起的程序工作号 恢复进程执行时,有两种选择:fg命令将挂起的作业放回到前 ...

  9. Linux下 “>/dev/null 2>1 “ 命令学习

    Linux下 ">/dev/null 2>&1 " 命令学习 参考链接: 1.https://blog.csdn.net/sunrier/article/det ...

最新文章

  1. python能解密java的,在python中解码Java对象
  2. SPOJ problem 42: Adding Reversed Numbers
  3. iBatis in 语句参数传入方法
  4. java取整和四舍五入方法
  5. 常用linux解压命令(原创)
  6. SQL Plus的使用详解(登录和常用命令)
  7. SolarWinds盛邀技术专业人士参加第八届年度THWACKcamp虚拟IT活动
  8. windows防火墙出站规则只允许访问指定域名ip,其他出站ip全部阻止的方法
  9. jieba.lcut()
  10. linux下传输文件命令
  11. 深度学习epochs、batch、batch_size和iteration的区分
  12. NOY 139 康托展开
  13. 用户头像上传(自用)
  14. OpenModelica仿真RLC电路
  15. Dubbo线程池问题思考Thread pool is EXHAUSTED!
  16. BPR的几种经典方法(转)
  17. 物化视图、普通视图及其区别
  18. ViewFlipper动态加载View
  19. java memorystream 包_C#字符串string 、byte[]、MemoryStream、Base64String的相互转换
  20. rapidminer员工离职分析_RapidMiner 9从根本上简化了分析团队的数据准备工作

热门文章

  1. SpringBoot使用Mybatis-PageHelper
  2. CDOJ 1805 矩阵 数学
  3. ABP官方文档翻译 1.5 多租户
  4. 怎样成为一名高手观后感
  5. Node.js怎么处理数据库中日期类型
  6. input标签与图片按钮水平对齐的解决方法
  7. 题目:[NOIP 2011]计算系数
  8. 百度联盟广告代码php,百度联盟原生广告的投放步骤
  9. 前端新人如何有效地提高自己
  10. 一行能装逼的JavaScript代码,就是怎么sao