启动一些程序服务的时候,有时候直接去程序的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/sh

echo '$0='$     '$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: -
# 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
fi if [ "$NETWORKING" = "no" ]
then
exit
fi RETVAL= #返回值 初始化
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 ] && touch ${lockfile} # 如果启动成功,生成一个lockfile文件
}
stop () {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} php-fpm # 停掉程序 killproc的函数就在文件头处引入的/etc/init.d/functions文件
RETVAL=$?
echo
if [ $RETVAL -eq ] ; then
rm -f ${lockfile} ${pidfile}
fi
} restart () {
stop
start
} reload () {
echo -n $"Reloading $prog: "
if ! /usr/sbin/php-fpm --test ; then
RETVAL=
echo $"not reloading due to configuration syntax error"
failure $"not reloading $prog due to configuration syntax error"
else
killproc -p ${pidfile} php-fpm -USR2 # 这里关键的是信号USR2,这个信号告诉是平滑重载所有worker进程并重新载入配置和二进制模块;这就是reload和restart的区别
RETVAL=$?
fi
echo
} # See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} php-fpm
RETVAL=$?
;;
restart)
restart
;;
reload|force-reload)
reload
;;
configtest)
/usr/sbin/php-fpm --test
RETVAL=$?
;;
condrestart|try-restart)
[ -f ${lockfile} ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart|configtest}"
RETVAL=
;;
esac exit $RETVAL
 

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

  1. linux下形如{command,parameter,parameter}执行命令 / bash花括号扩展

    背景 在复现vulhub上的漏洞ActiveMQ Deserialization Vulnerability (CVE-2015-5254)时,发现官方文档给出反弹shell的payload bash ...

  2. Linux下搭建实现HttpRunnerManager的异步执行、定时任务及任务监控

    前言 在之前搭建的HttpRunnerManager接口测试平台,我们还有一些功能没有实现,比如异步执行.定时任务.任务监控等,要完成异步执行,需要搭建 RabbitMQ 等环境,今天我们就来实现这些 ...

  3. Linux下安装配置Jmeter5.1,并执行jmx文件

    Windows下的jmeter是GUI模式,可查看操作,但是GUI对性能的干扰比较大,所有一般压测会在Linux上运行. 下面是Linux下安装配置Jmeter5.1,并执行jmx文件的步骤, 一.安 ...

  4. Linux下编译生成SO并进行调用执行

    Linux下编译生成SO并进行调用执行 参考博客的博客: C编译: 动态连接库 (.so文件) - Vamei - 博客园 (cnblogs.com) C 多个动态库存在同名函数问题处理方法:-fvi ...

  5. linux下查看当前用户的 三个命令

    linux下查看当前用户的 三个命令 1,whoami; 2,id -un; 3,who -H  可以列出当前所有的    NAME (用户名)    LINE (窗口列表)    TIME(开启时间 ...

  6. js:把字符串转为变量使用; js下将字符串当函数去执行的方法

    1 把字符串当变量使用 通过计算 string 得到的值(如果有的话).该方法只接受原始字符串作为参数 demo: var type = "car"; var newStr = & ...

  7. Linux下文件搜索、查找、查看命令

    Linux下文件搜索.查找.查看命令 1.最强大的搜索命令:find 查找各种文件的命令 2.在文件资料中查找文件:locate 3.搜索命令所在的目录及别名信息:which 4.搜索命令所在的目录及 ...

  8. (转)Linux下/etc/rc.local与/etc/init.d的区别与联系

    Linux下/etc/rc.local与/etc/init.d的区别与联系 2012-10-13 20:14:52|  分类: Linux学习|字号 订阅     1./etc/rc.local 这是 ...

  9. (转)yi_meng linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown区别

    linux 下 ifcfg-eth0 配置 以及ifconfig.ifup.ifdown区别 原文:https://www.cnblogs.com/yi-meng/p/3214471.html这3个命 ...

随机推荐

  1. CSS盒模型的介绍

    CSS盒模型的概念与分类      CSS盒模型就是一个盒子,封装周围的HTML元素,它包括内容content.边框border.内边距padding.外边距margin. CSS盒模型分为标准模型和 ...

  2. ES6模块化与常用功能

    目前开发环境已经普及使用,如vue,react等,但浏览器环境却支持不好,所以需要开发环境编译,下面介绍下开发环境的使用和常用语法: 一,ES6模块化 1,模块化的基本语法 ES6 的模块自动采用严格 ...

  3. jenkins无法获取插件的解决办法

    很多同学在初次配置Jenkins时,是需要安装一些插件的,但是在可选插件和已安装插件里,全都是空白的. 这是为什么呢? 是因为,Jenkins默认的更新站点服务器在国外,但我们身处天朝,所以这个站点已 ...

  4. python自动化开发-6-常用模块-续1

    json和pickle模块:用于序列化的模块. 序列化:我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serializatio ...

  5. Openlayer3之空间参考扩展

    Openlayers默认了两种空间参考,一个是EPSG4326,一个是EPSG3857,其它的空间参考需要进行扩展才能使用.所以我们初始化时进行了如下操作: 1.将配置数据库中所有的空间参考读取出来, ...

  6. (网页)logback的使用和logback.xml详解(转)

    转自博客园:行走在云端的愚公: 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: ...

  7. g4e基础篇#1 为什么要使用版本控制系统

    g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...

  8. 百度纯CSS生成菜单

    首页我们打看dreamweaver或其它编辑器,创建一个名为nav的导航菜单 <div class="nav"> <ul> <li><a ...

  9. Hive-1.2.1_01_安装部署

    前言:该文章是基于 Hadoop2.7.6_01_部署 进行的. 1. Hive基本概念 1.1. 什么是Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库 ...

  10. Linux 小知识翻译 - 「Shell」(也就是命令行接口)

    这次说说关于Shell的东西. 「Shell」是看不见实体的,所以理解起来可能会有些困难. 最近的Linux发行版默认都是用X Window System来操作的(也就是图形化操作),所以很少见到有人 ...