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

作者:码农有道

原文地址:https://www.cnblogs.com/wucongzhou/p/12579285.html

时间: 2024-10-16 05:00:31

CentOS7添加自定义系统服务的相关文章

CentOS7利用systemctl添加自定义系统服务

CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下 每一个服务以.service结尾,一般会分为3部分:[Unit].[Service]和[Install],我写的这个服务用于开机运行tomcat项目: [plain] vim /usr/lib/systemd/system/tomcat.service [pla

CentOS7设置自定义开机启动,添加自定义系统服务

Centos 系统服务脚本目录: /usr/lib/systemd/ 有系统(system)和用户(user)之分,如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即: lib/systemd/system/ 反之,用户登录后才能运行的程序,存在用户(user)里,服务以.service结尾. 这边以nginx开机运行为例: 1.建立服务文件 vim /lib/systemd/system/nginx.service [Unit] Description=nginx Af

CentOS7管理系统服务命令systemd

首先系统启动流程: POST --> Boot Sequeue(BIOS) --> Bootloader(MBR) --> Kernel(ramdisk) --> rootfs --> /sbin/init init: CentOS 5: SysV init CentOS 6:Upstart CentOS 7:Systemd Systemd的新特性: 系统引导时实现服务并行启动: 按需激活进程: 系统状态快照: 基于依赖关系定义服务控制逻辑 核心概念:unit unit由其相

在CentOS 7上利用systemctl添加自定义系统服务

CentOS 7继承了RHEL 7的新的特性,例如强大的systemctl,而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的运行效率.但服务的配置和以往也发生了极大的不同,说实在的,变的简单而易用了许多. 下面我们以利用forever来实现Node.js项目自启动为例,初探CentOS 7的systemctl. 前提:Node.js环境已配置成功,forever包安装成功,有一个能跑的Node.js程序. CentOS 7的服务

CentOS 7.x设置自定义开机启动,添加自定义系统服务

Centos 系统服务脚本目录: /usr/lib/systemd/ 有系统(system)和用户(user)之分, 如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即: /lib/systemd/system/ 反之,用户登录后才能运行的程序,存在用户(user)里 服务以.service结尾. 这边以nginx开机运行为例 1.建立服务文件 [html] view plaincopyprint? vim /lib/systemd/system/nginx.servic

centOS7 添加自定义快捷键(启动terminal,显示桌面等)

centos7中不自带启动终端的快捷键,可以自定义添加. 点击右上角的用户名,点击设置,在设置面板点击键盘,选择快捷键选项卡进入快捷键设置界面. 点击“+”添加快捷键.名称自定义(如"启动终端"),命令栏中输入:/usr/bin/gnome-terminal,即终端程序的地址. 若要实现winows下“显示桌面”的快捷键,可在快捷键面板下找到“导航”,设置“隐藏所有正常窗口”的快捷键. 若要实现windows下“打开计算机”的快捷键,可在快捷键面板下找到“启动器”,修改“主文件夹”的快

centos7 的系统服务

今天兴趣来了,打算安装ftp玩一玩,当用yum安装配置好之后,打算弄一个启动脚本加入系统服务,之后就可以service  vsftpd start 了: 但是突然有一个想法,如果不引入脚本,要怎么启动呢,以前的centos版本,当安装一个新的服务后,一般都会在/etxc/init.d下生成一个启动脚本,之后直接 chkconfig --add service 进去就好,但是现在服务不会在/etc/init.d/下生成: 我上网查了查也没查出来,就自己想于是我chkconfig  --list 了

CentOS 7上利用systemctl添加自定义系统服务(转)

CentOS 7继承了RHEL 7的新的特性,例如强大的systemctl,而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的运行效率.但服务的配置和以往也发生了极大的不同,说实在的,变的简单而易用了许多. 下面我们以利用forever来实现Node.js项目自启动为例,初探CentOS 7的systemctl. 前提:Node.js环境已配置成功,forever包安装成功,有一个能跑的Node.js程序. CentOS 7的服务

Android源码添加自定义系统服务

本文以一个简单的例子详细介绍如何为Android 6.0 系统新增一个系统服务,以及如何使用自定义系统服务. 目标:1.创建一个自定义服务CCCService 2.APP 开发过程中可以使用 getSystemService("ccc") 获取 CCCManager 并且调用里面的函数.  step1 创建aidl文件 在源码frameworks/base/core/java/android/os/ 下面新增 一个 ICCCService.aidl 假设我们定义了5个函数,这些函数将会