说明:

CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,就将程序存在系统服务里,即:/usr/lib/systemd/system目录下

该目录下的服务有以service结尾的,也有target结尾的。

service :守护进程的启动、停止、重启和重载是此类 unit 中最为明显的几个类型。

target :此类 unit 为其他 unit 进行逻辑分组。它们本身实际上并不做什么,只是引用其他 unit 而已。这样便可以对 unit 做一个统一的控制。

CentOS7的每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]

步骤:

vim /usr/lib/systemd/system/xxx.service
[Unit] # 主要是服务说明
Description=test # 简单描述服务
After=network.target # 描述服务类别,表示本服务需要在network服务启动后在启动
Before=xxx.service # 表示需要在某些服务启动之前启动,After和Before字段只涉及启动顺序,不涉及依赖关系。 [Service] # 核心区域
Type=forking # 表示后台运行模式。
User=user # 设置服务运行的用户
Group=user # 设置服务运行的用户组
KillMode=control-group # 定义systemd如何停止服务
PIDFile=/usr/local/test/test.pid # 存放PID的绝对路径
Restart=no # 定义服务进程退出后,systemd的重启方式,默认是不重启
ExecStart=/usr/local/test/bin/startup.sh # 服务启动命令,命令需要绝对路径
PrivateTmp=true # 表示给服务分配独立的临时空间 [Install]
WantedBy=multi-user.target # 多用户

字段说明:

Type的类型有:
simple(默认):# 以ExecStart字段启动的进程为主进程
forking: # ExecStart字段以fork()方式启动,此时父进程将退出,子进程将成为主进程(后台运行)。一般都设置为forking
oneshot: # 类似于simple,但只执行一次,systemd会等它执行完,才启动其他服务
dbus: # 类似于simple, 但会等待D-Bus信号后启动
notify: # 类似于simple, 启动结束后会发出通知信号,然后systemd再启动其他服务
idle: # 类似于simple,但是要等到其他任务都执行完,才会启动该服务。 EnvironmentFile:
指定配置文件,和连词号组合使用,可以避免配置文件不存在的异常。 Environment:
后面接多个不同的shell变量。
例如:
Environment=DATA_DIR=/data/elk
Environment=LOG_DIR=/var/log/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch
EnvironmentFile=-/etc/sysconfig/elasticsearch 连词号(-):在所有启动设置之前,添加的变量字段,都可以加上连词号
表示抑制错误,即发生错误时,不影响其他命令的执行。
比如`EnviromentFile=-/etc/sysconfig/xxx` 表示即使文件不存在,也不会抛异常 KillMode的类型:
control-group(默认):# 当前控制组里的所有子进程,都会被杀掉
process: # 只杀主进程
mixed: # 主进程将收到SIGTERM信号,子进程收到SIGKILL信号
none: # 没有进程会被杀掉,只是执行服务的stop命令
Restart的类型:
no(默认值): # 退出后无操作
on-success: # 只有正常退出时(退出状态码为0),才会重启
on-failure: # 非正常退出时,重启,包括被信号终止和超时等
on-abnormal: # 只有被信号终止或超时,才会重启
on-abort: # 只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog: # 超时退出时,才会重启
always: # 不管什么退出原因,都会重启
# 对于守护进程,推荐用on-failure
RestartSec字段:
表示systemd重启服务之前,需要等待的秒数:RestartSec: 各种Exec*字段:
# Exec* 后面接的命令,仅接受“指令 参数 参数..”格式,不能接受<>|&等特殊字符,很多bash语法也不支持。如果想支持bash语法,需要设置Tyep=oneshot
ExecStart: # 启动服务时执行的命令
ExecReload: # 重启服务时执行的命令
ExecStop: # 停止服务时执行的命令
ExecStartPre: # 启动服务前执行的命令
ExecStartPost:# 启动服务后执行的命令
ExecStopPost: # 停止服务后执行的命令 WantedBy字段:
multi-user.target: # 表示多用户命令行状态,这个设置很重要
graphical.target: # 表示图形用户状体,它依赖于multi-user.target

systemctl 命令

systemctl daemon-reload    # 重载系统服务
systemctl enable *.service # 设置某服务开机启动
systemctl start *.service # 启动某服务
systemctl stop *.service # 停止某服务
systemctl reload *.service # 重启某服务

案例:

步骤一:

vi /usr/lib/systemd/system/asr.service
[Unit]
Description=test
After=network.target remote-fs.target nss-lookup.target [Service]
Type=forking
ExecStart=/opt/asr.sh [Install]
WantedBy=multi-user.target

步骤二:写自己的脚本

vi /opt/asr.sh
#!/bin/bash
tar xvf /opt/apache-tomcat-7.0..tar.gz -C /opt/ #解压Apache服务到opt目录下

添加开机自启动

systemctl enable asr.service

备注:本文参考https://www.cnblogs.com/wang-yc/p/8876155.html 文档

centos系统将shell脚本改成systemctl启动的形式的更多相关文章

  1. bash-1 初始化CentOS系统的初始化脚本

    初始化CentOS系统的初始化脚本 #!/bin/bash # #******************************************************************* ...

  2. Android系统使用Shell脚本预装apk

    客户需求:需要在Android系统预安装一个或者若干个apk,客户可以选择自行卸载并且卸载后系统再次启动并不会再次自动安装. 考虑到需要批量安装应用,我这里考虑到使用灵活的shell脚本.shell脚 ...

  3. CentOS下编写shell脚本来监控MySQL主从复制的教程

    这篇文章主要介绍了在CentOS系统下编写shell脚本来监控主从复制的教程,文中举了两个发现故障后再次执行复制命令的例子,需要的朋友可以参考下 目的:定时监控MySQL主从数据库是否同步,如果不同步 ...

  4. ubuntu系统从中文环境改成英文环境

      我们在 安装ubuntu server版的时候,有人可能选择了中文环境安装,因为那样好设置时区等参数,可是安装好了后,运行某些命令的时候会有中文乱码提示,看起很是头蛋疼, 我们就需要将其改成英文环 ...

  5. Linux常用的系统监控shell脚本

    http://www.linuxqd.com下面是我常用的几个Linux系统监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助.1.查看主机网卡流量 #!/bin/bash #netw ...

  6. 转CentOS — MySQL备份 Shell 脚本

    http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482733.html 使用 mysqldump 备份数据库,通过 FTP 上传到备份服 ...

  7. CentOS — MySQL备份 Shell 脚本

    原文链接:http://www.cnblogs.com/bruceleeliya/archive/2012/05/04/2482733.html 新建一个 Shell 脚本文件 vi /home/wo ...

  8. centos 项目上线shell脚本

    最近在弄项目上线,然后写了个上线,备份,回滚的shell脚本 上线可根据自己公司项目做相关操作,备份回滚可修改目录则可实现 主管要求用shell写,那就用shell写吧 本想Python写更好的 哈哈 ...

  9. Centos上通过shell脚本实现数据库备份和还原

    最近有个这样的需求,通过shell脚本实现数据库备份还原,最后通过网上查询自己测试实现,将脚本分享给大家 1.数据库备份脚本 #!/bin/bash ds=`` list=`date +%Y`/`da ...

随机推荐

  1. 移动 web 开发问题和优化小结

    1.前言 到目前为止,互联网行业里,手机越来越智能化,移动端占有的比例越来越高,尤其实在电商,新闻,广告,游戏领域.用户要求越来越高,网站功能越来越好,效果越来越炫酷,这就要求我们产品质量越来越高,w ...

  2. Spark的任务提交和执行流程概述

    1.概述 为了更好地理解调度,我们先看一下集群模式的Spark程序运行架构图,如上所示: 2.Spark中的基本概念 1.Application:表示你的程序 2.Driver:表示main函数,创建 ...

  3. Nature

    1.主干 (1)<河图+洛书>:启发伏羲作八卦. (2)<三坟+五典>:失传:伏羲.神农.轩辕.少昊.颛顼.帝喾.唐尧.虞舜. (3)<八索+九丘>:失传:八卦之书 ...

  4. dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.63.dylib

    本地环境报错有 3 处,如下: 1. 执行命令,无论执行 php 的什么命令,统一报错 dyld: Library not loaded: /usr/local/opt/icu4c/lib/libic ...

  5. ssh服务启动失败 /var/empty must be owned by root and not group or world-writable.

    输入 /etc/rc.d/init.d/sshd start 启动sshd服务,报如下错误: /var/empty must be owned by root and not group or wor ...

  6. idea开发springboot 的mysql数据库连接问题

    今天在家用idea进行springboot开发,前面一些坑相对避免了,但是到数据库这块总是连接不上,报错主要是: Access denied for user 'root'@'localhost' ( ...

  7. Python 中 configparser 配置文件的读写及封装,配置文件存放数据,方便修改

    1. 将程序中不常变化的数据放在配置文件中,有什么好处? 将配置统一放在一起,进行统一管理,方便维护,方便修改 配置文件将存放测试数据比如: Excel文件名. 日志名. 用例执行的结果. 实际结果和 ...

  8. 微信小程序添加背景图片的坑

    给微信小程序页面加载背景图片解决方案 直接附上原文地址: 给微信小程序页面加载背景图片解决方案 - YUSIR 完美CODING世界 - CSDN博客  https://blog.csdn.net/y ...

  9. Docker 容器shell

    版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...

  10. 修改电脑IP地址和MAC地址

    一.修改IP地址: 电脑右下角:上网的图标,点击右键,打开“网络和共享中心”, 点击“本地连接”,打开的窗口点击“属性”, 打开新窗口,找到“IPv4”,点击“属性”, 打开新窗口,修改ip,保存,关 ...