CentOS7添加自定义系统服务
文章目录
- 一、编写Oracle数据库启动/重启/关闭的脚本
- 1、启动Oracle数据库的shell脚本
- 2、重启Oracle数据库的shell脚本
- 3、关闭Oracle数据库的shell脚本
- 二、编写自定义服务的配置文件
- 1、Unit部分
- 2、Service部分
- 3、Install部分
- 4、重启行为
- 三、使用自定义的服务
- 1、重新加载服务配置文件
- 2、启动/停止/启重oracle服务
- 3、把oracle服务设置为开机/关机自启动/停止
- 4、查看Oracle实例启动/停止的日志
- 四、版权声明
CentOS 6版本的系统服务是/etc/init.d启动脚本的方式,CentOS 7采用强大的systemctl来管理系统服务,大幅提高了系统服务的运行效率,但是服务的配置和以前版本完全不同,这是很大的进步,systemctl太简单易用了。
CentOS7添加自定义系统服务的步骤如下:
1)编写自定义的系统服务脚本文件;
2)用systemctl命令把自定义的系统服务设置为开机/关机自启动/停止。
本文以Oracle数据库为例子来介绍添加自定义系统服务的知识。假设ORACLE_HOME环境变量的值是/oracle/home,各位根据自己的实际情况调整脚本的内容,把文中/oracle/home替换成您ORACLE_HOME的值。
一、编写Oracle数据库启动/重启/关闭的脚本
1、启动Oracle数据库的shell脚本
启动Oracle数据库的脚本为/oracle/home/bin/dbstart,内容如下:
sqlplus / as sysdba <<EOF
startup;
EOF
修改脚本的权限为可执行。
chmod +x /oracle/home/bin/dbstart
2、重启Oracle数据库的shell脚本
启动Oracle数据库的脚本为/oracle/home/bin/dbrestart,内容如下:
sqlplus / as sysdba <<EOF
shutdown immediate;
startup;
EOF
修改脚本的权限为可执行。
chmod +x /oracle/home/bin/dbrestart
3、关闭Oracle数据库的shell脚本
启动Oracle数据库的脚本为/oracle/home/bin/dbshut,内容如下:
sqlplus / as sysdba <<EOF
shutdown immediate;
EOF
修改脚本的权限为可执行。
chmod +x /oracle/home/bin/dbshut
二、编写自定义服务的配置文件
系统服务的启动/重启/停止由它的配置文件决定,本文把Oracle数据库的系统服务命名为oracle.service。
创建服务配置文件/usr/lib/systemd/system/oracle.service,内容如下:
[Unit]
Description=Oracle RDBMS
After=network.target[Service]
Type=simple
ExecStart=/usr/bin/su - oracle -c "/oracle/home/bin/dbstart >> /tmp/oracle.log"
ExecReload=/usr/bin/su - oracle -c "/oracle/home/bin/dbrestart >> /tmp/oracle.log"
ExecStop=/usr/bin/su - oracle -c "/oracle/home/bin/dbshut >> /tmp/oracle.log"
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
接下来介绍服务配置文件各部分的含义。
1、Unit部分
Unit部分是启动顺序与依赖关系。
[Unit]
Description=Oracle RDBMS
After=network.target
Description字段:给出当前服务的简单描述。
Documentation字段:给出文档位置。
After字段:表示本服务应该在某服务之后启动。
Before字段:表示本服务应该在某服务之前启动。
After和Before字段只涉及启动顺序,不涉及依赖关系。设置依赖关系,需要使用Wants字段和Requires字段。
Wants字段:表示本服务与某服务之间存在“依赖”系,如果被依赖的服务启动失败或停止运行,不影响本服务的继续运行。
Requires字段,表示本服务与某服务之间存在“强依赖”系,如果被依赖的服务启动失败或停止运行,本服务也必须退出。
2、Service部分
Service部分定义如何启动/重启/停止服务。
[Service]
Type=simple
ExecStart=/usr/bin/su - oracle -c "/oracle/home/bin/dbstart >> /tmp/oracle.log"
ExecReload=/usr/bin/su - oracle -c "/oracle/home/bin/dbrestart >> /tmp/oracle.log"
ExecStop=/usr/bin/su - oracle -c "/oracle/home/bin/dbshut >> /tmp/oracle.log"
RemainAfterExit=yes
1)启动类型(Type字段)
Type字段定义启动类型。它可以设置的值如下。
simple(默认值):ExecStart字段启动的进程为主进程。
forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程。
oneshot:类似于simple,但只执行一次,Systemd会等它执行完,才启动其他服务。
dbus:类似于simple,但会等待D-Bus信号后启动。
notify:类似于simple,启动结束后会发出通知信号,然后Systemd再启动其他服务。
idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。
2)启动服务(ExecStart字段)
启动服务时执行的命令,可以是可执行程序、系统命令或shell脚本。
3)重启服务(ExecReload字段)
重启服务时执行的命令,可以是可执行程序、系统命令或shell脚本。
4)停止服务(ExecStop字段)
停止服务时执行的命令,可以是可执行程序、系统命令或shell脚本。
5)如果RemainAfterExit字段设为yes,表示进程退出以后,服务仍然保持执行。
6)服务配置文件还可以读取环境变量参数文件,我个人认为比较麻烦,没有必要,就不介绍了,设置程序的环境变量有很多种方法,可以在脚本中配置,也可以用“su
–”的方法。
3、Install部分
Install部分定义如何安装这个配置文件,即怎样做到开机启动。
[Install]
WantedBy=multi-user.target
WantedBy字段:表示该服务所在的Target。
Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,oracle所在的Target是multi-user.target(多用户模式)。
这个设置非常重要,因为执行systemctl enable
oracle.service命令时,oracle.service会被链接到/etc/systemd/system/multi-user.target.wants目录之中,实现开机启动的功能。
4、重启行为
Service部分还有一些字段,定义了重启行为。
1)KillMode字段
KillMode字段定义Systemd如何停止sshd服务,可以设置的值如下:
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉。
process:只杀主进程。
mixed:主进程将收到SIGTERM信号,子进程收到SIGKILL信号。
none:没有进程会被杀掉,只是执行服务的stop命令。
2)Restart字段
Restart字段定义了服务程序退出后,Systemd的重启方式,可以设置的值如下:
no(默认值):退出后不会重启。
on-success:只有正常退出时(退出状态码为0),才会重启。
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启。
on-abnormal:只有被信号终止和超时,才会重启。
on-abort:只有在收到没有捕捉到的信号终止时,才会重启。
on-watchdog:超时退出,才会重启。
always:不管是什么退出原因,总是重启。
3)RestartSec字段。
RestartSec字段:表示Systemd重启服务之前,需要等待的秒数。
三、使用自定义的服务
1、重新加载服务配置文件
每次修改了服务配置文件后,需要执行以下命令重新加载服务的配置文件。
systemctl daemon-reload
2、启动/停止/启重oracle服务
systemctl start oracle # 启动oracle服务。systemctl restart oracle # 重启oracle服务。systemctl stop oracle # 关闭oracle服务。
3、把oracle服务设置为开机/关机自启动/停止
systemctl is-enabled oracle # 查看oracle服务是否是开机自启动。systemctl enable oracle # 把oracle服务设置为开机自启动。
4、查看Oracle实例启动/停止的日志
Oracle实例启动的日志在/tmp/oracle.log文件中。
注意,只有通过systemctl启动/关闭Oracle实例和监听才会写日志,手工执行脚本不写日志。
四、版权声明
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道
CentOS7添加自定义系统服务相关推荐
- 在CentOS 7上利用systemctl添加自定义系统服务 /usr/lib/systemd/
在CentOS 7上利用systemctl添加自定义系统服务 [日期:2014-07-21] 来源:blog.csdn.net/yuanguozhengjust 作者:yuanguozhengjust ...
- CentOS7设置自定义开机启动,添加自定义系统服务
Centos 系统服务脚本目录: /usr/lib/systemd/ 有系统(system)和用户(user)之分,如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即: lib ...
- CentOS7 注册系统服务实现服务自启
文章目录 背景 实现 创建 `服务别名.service` 文件,添加服务自启内容 将redis.service 文件拷贝至 /etc/systemd/system 目录 重载系统服务 添加开机自启并启 ...
- centos7以上系统服务管理命令-systemctl
在Centos7以上的系统中把service和chkconfig两个指令结合后,可能在日常管理和使用中带来很多的不习惯,因此上网看了下,找到一个比较不错的总结表格在这里收录下,在这里补充一点就是如果自 ...
- 7 centos 查看程序文件数量_CentOS之使用Systemd添加自定义系统服务
文章引言 Systemd 就是为了解决Linux 的启动一直采用init进程问题而诞生的.它的设计目标是,为系统的启动和管理提供一套完整的解决方案. 根据 Linux 惯例,字母d是守护进程(daem ...
- CentOS 7设置开机启动服务,添加自定义系统服务(Redis为例,绝对有效)
1.建立服务文件 vim /usr/lib/systemd/system/redis.service 2 正式编写redis.service前先自己写一下在根目录中启动和关闭redis服务的命令,如下 ...
- 安卓8添加自定义系统服务
1)创建aidl文件frameworks/base/core/java/android/os目录添加IHookStatus.aidl,内容如下 interface IHookStatus { bool ...
- Android源码添加自定义系统服务
1.创建AIDL文件 在源码frameworks/base/core/java/android/os/下面新增了一个ICCCService.aidl 2.将AIDL文件放到编译frameworks/b ...
- Linux开机启动程序rc.local
文章目录 1./etc/rc.local是/etc/rc.d/rc.local的软链接 2.rc.local文件的原始内容 3.rc.local文件的配置 4.应用经验 5.版权声明 在CentOS7 ...
最新文章
- 重磅:国拨概算5.34亿!“新一代人工智能”重大项目项目申报指南发布
- [原]职场中,要善于交换利益
- 反汇编引擎Capstone
- Intent 匹配规则
- 【Angular】双向数据绑定--作用域树
- python生成shell脚本_Python设置在shell脚本中自动补全功能的方法
- 最近,我在Spring的BeanUtils踩了不少坑
- 「小程序JAVA实战」小程序的留言和评价功能(70)
- 《精通javascript》5,6章小结(一)
- 移动APP测试,adb工具
- ESP8285烧写问题备忘
- 刷脸信息采集坚持用户授权最小够用的原则
- 【CPRI协议v7.0】CPRI 8b/10b编码Scrambling功能
- 无源贴片晶振四角引脚_从贴片晶振脚位你看出什么信息?
- ClickHouse可视化DBM Release 1.12.0
- 26.(cesium之家)cesium军事标绘-攻击箭头编辑修改(燕尾)
- Python笔记_81_结算页面_订单模型_优惠券
- 2021周记11:慢慢自律和追剧
- Diva无法运行LVS问题(virtuoso,layout)
- 爬取马蜂窝英国旅行攻略
热门文章
- Python响应Ctrl键+鼠标滚轮操作动态调整文本框的字号
- Python+pandas处理Excel文件中的超市营业额数据
- 1000道Python题库系列分享20(43道填空与判断题)
- 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(3)
- Python使用BoundedSemaphore对象进行线程同步
- Python模拟汉诺塔问题移动盘子的过程
- php获取时间格式的年份,PHP获取当前时间、时间戳的各种格式写法汇总
- C++ 面向对象程序三大特性之 继承
- linux安装gtk命令,Ubuntu 下安装 GTK2.0
- 双机热备_涨知识 | 双机热备与备份一体机的联系及区别