Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–6-开机自动启动或者禁用服务

联系:QQ(5163721)

标题:Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–6-开机自动启动或者禁用服务

作者:Lunar©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]

测试目的:研究一下Linux7中,如何设置服务的开机自动启动或者不自动启动
当前的OS版本:

[root@lunar1 ~]# cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core) 
[root@lunar1 ~]# 
[root@lunar1 ~]# cat /etc/centos-release-upstream
Derived from Red Hat Enterprise Linux 7.2 (Source)
[root@lunar1 ~]# 
[root@lunar1 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

[root@lunar1 ~]# 
[root@lunar1 ~]# cat /etc/system-release-cpe
cpe:/o:centos:centos:7
[root@lunar1 ~]#  

CRS版本:

[root@lunar1 ~]# crsctl query crs activeversion -f
Oracle Clusterware active version on the cluster is [12.1.0.2.0]. The cluster upgrade state is [NORMAL]. The cluster active patch level is [0].
[root@lunar1 ~]# 

Linux7使用systemd替换了SysV,Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,而且够在进程启动过程并行加载必要的服务。
支持并行化任务
同时采用socket式与D-Bus总线式激活服务;
按需启动守护进程(daemon);
利用 Linux 的 cgroups 监视进程;
支持快照和系统恢复;
维护挂载点和自动挂载点;
各服务间基于依赖关系进行精密控制
.
systemd可以创建不同的状态,状态提供了灵活的机制来设置启动时的配置项。
这些状态是由多个unit文件组成的,状态又叫做启动目标(target),unit文件可以控制服务、设备、套接字和挂载点。
systemd配置文件被称为unit单元,使用man systemd可以查看这些unit(单元)的具体定义。
根据类型不同,unit以不同的扩展名结尾。
.service系统服务;
.target一组系统服务;
.automount自动挂载点;
.device能被内核识别的设备;
.mount挂载点;
.path文件系统的文件或者目录;
.scope外部创建的进程;
.slice一组分层次管理的系统进程;
.snapshot系统服务状态管理;
.socket进程间通讯套接字;
.swap定义swap文件或者设备;
.timer定义定时器。
.
所有可用的unit(单元文件)存放在下面的两个目录下:
/etc/systemd/system/ —–优先级更高(这个目录中的内容很少,一般只有十几个)
例如:

[root@localhost ~]# ll /usr/lib/systemd/system/|grep  journald
-rw-r--r--. 1 root root 1145 11月 20 12:49 systemd-journald.service
-rw-r--r--. 1 root root  833 11月 20 12:49 systemd-journald.socket
[root@localhost ~]# 

/usr/lib/systemd/system/ —这个目录是一些Unit的socket,targt等等
例如:

[root@localhost ~]# ll /usr/lib/systemd/system/|grep  runlevel
lrwxrwxrwx. 1 root root   15 1月  20 09:57 runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root   13 1月  20 09:57 runlevel1.target -> rescue.target
drwxr-xr-x. 2 root root   49 1月  20 09:57 runlevel1.target.wants
lrwxrwxrwx. 1 root root   17 1月  20 09:57 runlevel2.target -> multi-user.target
drwxr-xr-x. 2 root root   49 1月  20 09:57 runlevel2.target.wants
lrwxrwxrwx. 1 root root   17 1月  20 09:57 runlevel3.target -> multi-user.target
drwxr-xr-x. 2 root root   49 1月  20 09:57 runlevel3.target.wants
lrwxrwxrwx. 1 root root   17 1月  20 09:57 runlevel4.target -> multi-user.target
drwxr-xr-x. 2 root root   49 1月  20 09:57 runlevel4.target.wants
lrwxrwxrwx. 1 root root   16 1月  20 09:57 runlevel5.target -> graphical.target
drwxr-xr-x. 2 root root   49 1月  20 09:57 runlevel5.target.wants
lrwxrwxrwx. 1 root root   13 1月  20 09:57 runlevel6.target -> reboot.target
-rw-r--r--. 1 root root  761 11月 20 12:49 systemd-update-utmp-runlevel.service
[root@localhost ~]# 

当前系统已经安装了Oracle 12.1 GI,查看当前开机自动启动的服务:

[root@lunar1 ~]# ls -lrt /etc/systemd/system/multi-user.target.wants/|grep oracle
lrwxrwxrwx  1 root root 38 Jan 19 17:16 oracle-tfa.service -> /etc/systemd/system/oracle-tfa.service
lrwxrwxrwx  1 root root 40 Jan 19 17:18 oracle-ohasd.service -> /etc/systemd/system/oracle-ohasd.service
[root@lunar1 ~]# 
[root@lunar1 ~]# ls /etc/systemd/system/multi-user.target.wants/|wc -l
35
[root@lunar1 ~]# 
[root@lunar1 ~]# ls /etc/systemd/system/multi-user.target.wants/
abrt-ccpp.service    atd.service         irqbalance.service      libvirtd.service        oracle-ohasd.service  rsyslog.service          vboxadd-x11.service
abrtd.service        chronyd.service     kdump.service           mdmonitor.service       oracle-tfa.service    sshd.service             vmtoolsd.service
abrt-oops.service    crond.service       ksm.service             ModemManager.service    postfix.service       sysstat.service          vncserver@:1.service
abrt-vmcore.service  hypervkvpd.service  ksmtuned.service        NetworkManager.service  remote-fs.target      vboxadd.service          vncserver@:2.service
abrt-xorg.service    hypervvssd.service  libstoragemgmt.service  nfs-client.target       rngd.service          vboxadd-service.service  vncserver@:3.service
[root@lunar1 ~]# 

OEL 7.2和CentOS 7.2中,如果选择了GUI服务器,添加开发包和兼容库后,一般来说,没有安装Oracle时,只需要32个自动启动的服务:

[root@localhost ~]# ls /etc/systemd/system/multi-user.target.wants/|wc -l
32
[root@localhost ~]# ls /etc/systemd/system/multi-user.target.wants/
abrt-ccpp.service    abrt-xorg.service     chronyd.service  hypervkvpd.service  ksmtuned.service        ModemManager.service    remote-fs.target  sshd.service
abrtd.service        atd.service           crond.service    hypervvssd.service  libstoragemgmt.service  NetworkManager.service  rngd.service      sysstat.service
abrt-oops.service    auditd.service        cups.path        irqbalance.service  libvirtd.service        nfs-client.target       rsyslog.service   tuned.service
abrt-vmcore.service  avahi-daemon.service  cups.service     ksm.service         mdmonitor.service       postfix.service         smartd.service    vmtoolsd.service
[root@localhost ~]# 

以irqbalance.service为例,该服务的作用大致是用于优化中断分配,它会自动收集系统数据以分析使用模式
并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode.
处于 Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能.
处于 Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗.
(详见:http://www.irqbalance.org/documentation.php)
IRP的github项目地址:https://github.com/Irqbalance/irqbalance
.
Oracle官方文档中建议:
When Should Not To Use
In most of time, irqbalance service is enabled and should be used unless:
Manually pinning apps/IRQ’s to specific cores for a very good reason (low latency, realtime requirements, etc.)Virtual Guests.
It does not really make sense because unless you are pinning the guest to specific CPUs and IRQs and dedicated net/storage hardware, you will likely not see the benefits you would on bare metal.
.
在Exadata的低版本中,需要禁用该服务,否则容易出现系统问题,参见:
Exadata 11.2.3.2.1 release and patch (14522699) for Exadata 11.1.3.3, 11.2.1.2.x, 11.2.2.2.x, 11.2.2.3.x, 11.2.2.4.x, 11.2.3.1.x, 11.2.3.2.x (Doc ID 1485475.1)
Stop and disable irqbalance service on Exadata V2 database and storage servers (X4275) to prevent unexpected reboots caused by Linux bug 15835941
相关bug:
BUG:15835941 – V2 EXADATA REBOOTED FREQUENTLY AFTER UPGRADE: NO IRQ HANDLER FOR VECTOR
BUG:17165350 – BL460 G6 NIC’S GO OFFLINE “DO_IRQ: 10.136 NO IRQ HANDLER FOR VECTOR (IRQ -1)”
.
现在,查看一下该服务当前的状态:

[root@lunar1 system]# systemctl status irqbalance.service
● irqbalance.service - irqbalance daemon
   Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2016-01-20 07:58:38 CST; 1h 0min ago
 Main PID: 743 (irqbalance)
   CGroup: /system.slice/irqbalance.service
           └─743 /usr/sbin/irqbalance --foreground

Jan 20 07:58:38 lunar1.oracle.com systemd[1]: Started irqbalance daemon.
Jan 20 07:58:38 lunar1.oracle.com systemd[1]: Starting irqbalance daemon...
[root@lunar1 system]# 

我们看到当前irqbalance服务runing的状态,它加载的配置文件是/usr/lib/systemd/system/irqbalance.service
启动日期是:Wed 2016-01-20 07:58:38 CST; 1h 0min ago
进程号是743
现在我们停止这个服务:

[root@lunar1 system]# systemctl stop irqbalance.service
[root@lunar1 system]# systemctl status irqbalance.service
● irqbalance.service - irqbalance daemon
   Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Wed 2016-01-20 09:00:07 CST; 5s ago
  Process: 743 ExecStart=/usr/sbin/irqbalance --foreground $IRQBALANCE_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 743 (code=exited, status=0/SUCCESS)

Jan 20 07:58:38 lunar1.oracle.com systemd[1]: Started irqbalance daemon.
Jan 20 07:58:38 lunar1.oracle.com systemd[1]: Starting irqbalance daemon...
Jan 20 09:00:07 lunar1.oracle.com systemd[1]: Stopping irqbalance daemon...
Jan 20 09:00:07 lunar1.oracle.com systemd[1]: Stopped irqbalance daemon.
[root@lunar1 system]# 

根据上面的信息,我们知道该服务是开机自动启动的服务,当前的状态是没有启动的(Active: inactive (dead) )
查看一下该服务的定义:

[root@localhost ~]# cat /usr/lib/systemd/system/irqbalance.service
[Unit]
Description=irqbalance daemon
After=syslog.target

[Service]
EnvironmentFile=/etc/sysconfig/irqbalance
ExecStart=/usr/sbin/irqbalance --foreground $IRQBALANCE_ARGS

[Install]
WantedBy=multi-user.target
[root@localhost ~]# 

这里我们看到该服务是在After=syslog.target之后启动的服务,也就是它依赖于syslog这个服务。
然后我们设置禁止irqbalance.service开机自动启动:

[root@lunar1 system]# systemctl disable irqbalance.service
Removed symlink /etc/systemd/system/multi-user.target.wants/irqbalance.service.
[root@lunar1 system]# 

这里我们看到,禁止开机自动启动的本质就是:
Removed symlink /etc/systemd/system/multi-user.target.wants/irqbalance.service.
也就是我们前面说的,开机自动启动的实质是删除了/etc/systemd/system/下的link文件:

[root@lunar1 system]# ll /etc/systemd/system/multi-user.target.wants/irqbalance.service
ls: cannot access /etc/systemd/system/multi-user.target.wants/irqbalance.service: No such file or directory
[root@lunar1 system]# 

具体删除那个target下的link文件呢?
由于该服务定义文件中的[Install]部分写明了“WantedBy=multi-user.target”
因此就需要删除/etc/systemd/system/multi-user.target.wants/irqbalance.service文件。
.
再次查看,irqbalance.service服务已经是开机不自动重启了“/irqbalance.service; disabled;”:

[root@lunar1 system]# systemctl status irqbalance.service
● irqbalance.service - irqbalance daemon
   Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

Jan 20 07:58:38 lunar1.oracle.com systemd[1]: Started irqbalance daemon.
Jan 20 07:58:38 lunar1.oracle.com systemd[1]: Starting irqbalance daemon...
Jan 20 09:00:07 lunar1.oracle.com systemd[1]: Stopping irqbalance daemon...
Jan 20 09:00:07 lunar1.oracle.com systemd[1]: Stopped irqbalance daemon.
[root@lunar1 system]# 

再来看一下开机自动启动的服务在Linux7中如何实现的:

[root@lunar1 system]# systemctl enable irqbalance.service
Created symlink from /etc/systemd/system/multi-user.target.wants/irqbalance.service to /usr/lib/systemd/system/irqbalance.service.
[root@lunar1 system]# ll /etc/systemd/system/multi-user.target.wants/irqbalance.service
lrwxrwxrwx 1 root root 42 Jan 20 09:08 /etc/systemd/system/multi-user.target.wants/irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
[root@lunar1 system]# 

这里我们看到,设置开机自动重启的本质就是在/etc/systemd/system/multi-user.target.wants/下面创建一个指向/usr/lib/systemd/system/同名service定义的软link
为什么在/etc/systemd/system/的multi-user.target.wants目录下创建呢?
还记得定义文件中的[Install]部分怎么写的么:
WantedBy=multi-user.target
因此,就是创建在multi-user.target.wants目录下了。
.
如果使用service命令是什么效果:

[root@localhost ~]# systemctl status irqbalance.service
● irqbalance.service - irqbalance daemon
   Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2016-01-20 10:49:37 CST; 2h 32min ago
 Main PID: 630 (irqbalance)
   CGroup: /system.slice/irqbalance.service
           └─630 /usr/sbin/irqbalance --foreground

1月 20 10:49:37 localhost.localdomain systemd[1]: Started irqbalance daemon.
1月 20 10:49:37 localhost.localdomain systemd[1]: Starting irqbalance daemon...
[root@localhost ~]# 
[root@localhost ~]# 

重启服务:

[root@localhost ~]# service irqbalance restart 
Redirecting to /bin/systemctl restart  irqbalance.service
[root@localhost ~]# 

这里看到,如果使用service启动服务,本质是重定向到了systemctl命令:/bin/systemctl restart irqbalance.service
再次查看状态:

[root@localhost ~]# systemctl status irqbalance.service
● irqbalance.service - irqbalance daemon
   Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2016-01-20 13:22:36 CST; 11s ago
 Main PID: 14954 (irqbalance)
   CGroup: /system.slice/irqbalance.service
           └─14954 /usr/sbin/irqbalance --foreground

1月 20 13:22:36 localhost.localdomain systemd[1]: Started irqbalance daemon.
1月 20 13:22:36 localhost.localdomain systemd[1]: Starting irqbalance daemon...
[root@localhost ~]# 

注意服务启动时间从“ 三 2016-01-20 10:49:37 CST; 2h 32min ago”改变为“ 三 2016-01-20 10:49:37 CST; 2h 32min ago”了。
证明service确实可以重启服务,不过我感觉这个是systemd为了向下兼容的。
.
再来看一下Oracle的GIohasd.service服务:

[root@lunar1 ~]# ps -ef|grep ohasd
root      1462     1  0 12:45 ?        00:00:00 /bin/sh /etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null
root     12192 27423  0 15:31 pts/1    00:00:00 grep --color=auto ohasd
root     27770     1  1 15:02 ?        00:00:18 /u01/app/12.1.0.2/grid/bin/ohasd.bin reboot
[root@lunar1 ~]# 
[root@lunar1 ~]# systemctl status ohasd.service
● ohasd.service - Oracle High Availability Services
   Loaded: loaded (/etc/systemd/system/ohasd.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
[root@lunar1 ~]#

从上面的输出可以看到,已经安装了ohasd.service服务,并且启动进程正在运行
从systemctl status的输出可以看到,目前系统已经加载了/etc/systemd/system/ohasd.service文件,并且设置为开机自动启动的模式了。
但是后面的Active: inactive (dead),不知道是为什么,怀疑是12.1 GI的bug。
注意:
Linux 7.2上Oracle 12.1和12.2beta版本的GI软件有bug,执行root.sh的时候没有正确安装该服务。
现在看到的这个ohasd.service服务是我自己手工安装的。

[root@lunar1 ~]# crsctl query crs autostart 
'Autostart delay':       0
'Autostart servercount': 1
[root@lunar1 ~]# 

CRS状态:

[root@lunar1 ~]# crsctl status res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRSDG.dg
               ONLINE  ONLINE       lunar1                   STABLE
               ONLINE  ONLINE       lunar2                   STABLE
ora.DATADG1.dg
               ONLINE  ONLINE       lunar1                   STABLE
               ONLINE  ONLINE       lunar2                   STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       lunar1                   STABLE
               ONLINE  ONLINE       lunar2                   STABLE
ora.asm
               ONLINE  ONLINE       lunar1                   Started,STABLE
               ONLINE  ONLINE       lunar2                   Started,STABLE
ora.net1.network
               ONLINE  ONLINE       lunar1                   STABLE
               ONLINE  ONLINE       lunar2                   STABLE
ora.ons
               ONLINE  ONLINE       lunar1                   STABLE
               ONLINE  ONLINE       lunar2                   STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       lunar1                   STABLE
ora.MGMTLSNR
      1        ONLINE  ONLINE       lunar1                   169.254.128.253,STAB
                                                             LE
ora.cvu
      1        ONLINE  ONLINE       lunar1                   STABLE
ora.lunar1.vip
      1        ONLINE  ONLINE       lunar1                   STABLE
ora.lunar2.vip
      1        ONLINE  ONLINE       lunar2                   STABLE
ora.lunardb.db
      1        ONLINE  ONLINE       lunar1                   Open,STABLE
      2        ONLINE  ONLINE       lunar2                   Open,STABLE
ora.mgmtdb
      1        OFFLINE OFFLINE                               STABLE
ora.oc4j
      1        ONLINE  ONLINE       lunar1                   STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       lunar1                   STABLE
--------------------------------------------------------------------------------
[root@lunar1 ~]# 

这里看到MGMTDB没有启动,这个是有玄机的,后面慢慢说,O(∩_∩)O哈哈~


Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–1-简介
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列-2-修改主机名和hostnamectl工具的使用
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–3-systemd(d.bin和ohasd守护进程)
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–4-target(图形界面和字符界面)
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–5-防火墙
Linux7(CentOS,RHEL,OEL)和Oracle RAC环境系列–6-开机自动启动或者禁用服务

此条目发表在 Linux, ORACLE 12C 分类目录。将固定链接加入收藏夹。

评论功能已关闭。