Script de arranque con el systemctl

Hoy vamos a ver (con mucho retraso) como hacer un script de arranque para el systemctl para nuestra base de datos 12c

Vamos a poner el supuesto de que tenemos una base de datos 12c, en filesystem en una OL7. Al no haber instalado el grid control, nadie arrancará nuestra base de datos.
¿Como hacemos para que arranque en el inicio ?
Simplemente hay que crearlos servicios de arranque

Scripts de arranque

Al igual que en un linux clásico, necesitaremos un script de start y stop para nuestra base de datos, nosotros crearemos :

  • listener.sh para el listener
  • cdbtest.sh para nuestra instancia cdbtest.

Por compatibilidad con los sistemas antiguos, lo dejaremos en /etc/init.d (auqnue toda la información que he visto en internet lo deja ene l propio $HOME de oracle ) y le añadiremos una guarda que compruebe que solamente pueda arrancase con el usuario oracle (y evitar asi que alguien lo use como root)

/etc/init.d/listener.sh

#!/bin/bash
##  Configuramos el nombre del usuario que arranca la BBDD
export USUARIO=oracle
if [ $UID -ne  `id -u $USUARIO`  ];then
 echo "Programa invocado con  incorrecto, debe de invocarse como $USUARIO "
 exit 1 ;
fi
export ORAENV_ASK=no
export export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
case $1 in 
start)
	$ORACLE_HOME/bin/lsnrctl start 
;;
stop)
        $ORACLE_HOME/bin/lsnrctl stop
;;
status)
        $ORACLE_HOME/bin/lsnrctl status
;;
*)
  echo "Usage $0 start|stop|status "
  ;;
esac

/etc/init.d/cdbtest.sh

#!/bin/bash
##  Configuramos el nombre del usuario que arranca la BBDD
export USUARIO=oracle
if [ $UID -ne  `id -u $USUARIO`  ];then
 echo "Programa invocado con  incorrecto, debe de invocarse como $USUARIO "
 exit 1 ;
fi
export ORACLE_SID=cdbtest
export ORAENV_ASK=NO
. oraenv
case $1 in 
start)
$ORACLE_HOME/bin/sqlplus "/as sysdba" << EOF
	startup;
	exit;
EOF
;;
stop)
$ORACLE_HOME/bin/sqlplus "/as sysdba" << EOF
	shutdown immediate;
	exit;
EOF
;;
*)
  echo "Usage $0 start|stop "
  ;;

Creamos los servicios de systemctl

Ahora que tenemos ya los scripts que arrancaran y pararan el listener y la base de datos, crearemos nuestros servicios de arranque.
Crearemos uno especifico para el listener y otro para nuestra instancia cdbtest.
Para identificar cuales son nuestros servicios , los llamaremos dbora-XXX . Esto no es una convención genérica ni una best practice , sino que es simplemente un patrón propio para facilitarme su futura identificación.

Servicio dbora-listener.service

Crearemos un fichero llamado /lib/systemd/system/dbora-listener.service

[Unit]
Description=The Oracle Listener
After=syslog.target network.target

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535

RemainAfterExit=yes
User=oracle
Group=oinstall
ExecStart=/etc/init.d/listener.sh start 
ExecStop=/etc/init.d/listener.sh stop 
Type=idle
RemainAfterExit=yes
User=oracle
Group=oinstall
[Install]
WantedBy=multi-user.target

Servcio dbora-cdbtets.service

Ahora crearemos un servicio de arranque para nuestra instancia /lib/systemd/system/dbora-cdbtets.service

[Unit]
Description=Base de datos cdbtest
After=syslog.target network.target dbora-listener.service

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
RemainAfterExit=yes
User=oracle
Group=dba
ExecStart=/etc/init.d/cdbtest.sh start  >> /tmp/startup_cdbtestlog 2>&1 &
ExecStop=/etc/init.d/cdbtest.sh stop  >> /tmp/shutdown_cdbtestlog 2>&1 &
Type=idle
[Install]
WantedBy=multi-user.target

Configuramos los servicios

Ya tenemos los scripts de arranque y los scripts de los servicios. Ahora simplemente nos quedará el habilitarlos para su funcionamiento.
Para ello, primero haremos un reload para refrescar los servicios

# systemctl daemon-reload
Y luego los cargaremos y habilitaremos
systemctl start dbora-listener.service
systemctl enable dbora-listener.service
systemctl start dbora-cdbtest.service
systemctl enable dbora-cdbtest.service

Así pues, si queremos ver el estado del service, podremos ver como :

[root@alone ~]# systemctl status dbora-cdbtest.service
● dbora-cdbtest.service - Base de datos cdbtest
   Loaded: loaded (/usr/lib/systemd/system/dbora-cdbtest.service; enabled; vendor preset: disabled)
   Active: active (exited) since mar 2017-02-21 13:16:19 CET; 9min ago
  Process: 1039 ExecStart=/etc/init.d/cdbtest.sh start >> /tmp/startup_cdbtestlog 2>&1 & (code=exited, status=0/SUCCESS)
 Main PID: 1039 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/dbora-cdbtest.service
           ├─2303 ora_pmon_cdbtest
           ├─2305 ora_psp0_cdbtest
           ├─2307 ora_vktm_cdbtest
           ├─2311 ora_gen0_cdbtest
           ├─2315 ora_mman_cdbtest
           ├─2317 ora_diag_cdbtest
           ├─2319 ora_dbrm_cdbtest
           ├─2321 ora_vkrm_cdbtest
           ├─2323 ora_dia0_cdbtest
           ├─2325 ora_dbw0_cdbtest
           ├─2327 ora_lgwr_cdbtest
           ├─2329 ora_ckpt_cdbtest
           ├─2331 ora_smon_cdbtest
           ├─2333 ora_reco_cdbtest
           ├─2335 ora_lreg_cdbtest
           ├─2337 ora_pxmn_cdbtest
           ├─2339 ora_mmon_cdbtest
           ├─2341 ora_mmnl_cdbtest
           ├─2343 ora_d000_cdbtest
           ├─2345 ora_s000_cdbtest
           ├─2357 ora_tmon_cdbtest
           ├─2359 ora_tt00_cdbtest
           ├─2361 ora_smco_cdbtest
           ├─2363 ora_w000_cdbtest
           ├─2365 ora_w001_cdbtest
           ├─2369 ora_aqpc_cdbtest
           ├─2373 ora_p000_cdbtest
           ├─2375 ora_p001_cdbtest
           ├─2377 ora_p002_cdbtest
           ├─2379 ora_p003_cdbtest
           ├─2381 ora_qm02_cdbtest
           ├─2385 ora_q002_cdbtest
           ├─2387 ora_q003_cdbtest
           └─2452 ora_cjq0_cdbtest

feb 21 13:16:33 alone.pamplona.name cdbtest.sh[1039]: Copyright (c) 1982, 2014, Oracle.  All rights reserved.
feb 21 13:16:51 alone.pamplona.name cdbtest.sh[1039]: Connected to an idle instance.
feb 21 13:17:00 alone.pamplona.name cdbtest.sh[1039]: SQL> ORACLE instance started.
feb 21 13:17:00 alone.pamplona.name cdbtest.sh[1039]: Total System Global Area 6291456000 bytes
feb 21 13:17:00 alone.pamplona.name cdbtest.sh[1039]: Fixed Size                    2938352 bytes
feb 21 13:17:00 alone.pamplona.name cdbtest.sh[1039]: Variable Size                 3372222992 bytes
feb 21 13:17:00 alone.pamplona.name cdbtest.sh[1039]: Database Buffers         2902458368 bytes
feb 21 13:17:00 alone.pamplona.name cdbtest.sh[1039]: Redo Buffers                   13836288 bytes
feb 21 13:17:05 alone.pamplona.name cdbtest.sh[1039]: Database mounted.
feb 21 13:17:30 alone.pamplona.name cdbtest.sh[1039]: Database opened.

Renombrado las interfaces de red como ethX

En una entrada de la semana pasada vimos como el nuevo Oracle Linux 7 y RedHat 7 han decidido cambiar los servicios y las notaciones a un nuevo método con mejoras a mi entender altamente cuestionables.

Hoy vamos a ver como podemos cambiar los interfaces de red de esa notación a la notación clásica de linux ethX.

La instalacion por defecto de Oracle Linux 7 nos dejará unos interfaces de red tal que así

Captura de pantalla 2014-12-03 a las 19.50.30

Para volver a tener nuestros interfaces de red con nuestros nombres habituales deberemos de hacer:

[root@alone ~]# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=es 
crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet "
GRUB_DISABLE_RECOVERY="true"

Y modificaremos la línea

GRUB_CMDLINE_LINUX="vconsole.keymap=es crashkernel=auto 
 vconsole.font=latarcyrheb-sun16 rhgb quiet ”

añadiéndole net.ifnames=0 biosdevname=0 para que quede:

[root@alone ~]# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=es 
crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet net.ifnames=0 biosdevname=0"
GRUB_DISABLE_RECOVERY="true"

Tras esto ejecutamos la utilidad grub2-mkconfig -o /boot/grub2/grub.cfg

[root@alone ~]# grub2-mkconfig -o /boot/grub2/grub.cfg 
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.9.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.9.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.8.13-44.1.5.el7uek.x86_64
Found initrd image: /boot/initramfs-3.8.13-44.1.5.el7uek.x86_64.img
Warning: Please don't use old title `Oracle Linux Server, with Unbreakable Enterprise Kernel 3.8.13-44.1.5.el7uek.x86_64' for GRUB_DEFAULT, use `Advanced options for Oracle Linux Server>Oracle Linux Server, with Unbreakable Enterprise Kernel 3.8.13-44.1.5.el7uek.x86_64' (for versions before 2.00) or `gnulinux-advanced-533cf96e-16ad-48b4-b21f-955d13dcbf32>gnulinux-3.8.13-44.1.5.el7uek.x86_64-advanced-533cf96e-16ad-48b4-b21f-955d13dcbf32' (for 2.00 or later)
Found linux image: /boot/vmlinuz-3.8.13-35.3.1.el7uek.x86_64
Found initrd image: /boot/initramfs-3.8.13-35.3.1.el7uek.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-b231a9662b504ceb8b5883008ce1db77
Found initrd image: /boot/initramfs-0-rescue-b231a9662b504ceb8b5883008ce1db77.img

Y nos vamos al directorio /etc/sysconfig/network-scripts donde haremos:

mv ifcfg-enp0s3 a ifcfg-eht0
mv ifcfg-enp0s8 a ifcfg-eht1
mv ifcfg-enp0s9 a ifcfg-eht2

tras esto solo nos queda editar los ficheros ethX de toda la vida y ponerle los parámetros que queramos (entre ellos el parámetro «NAME») y ya tendremos los dispositivos renombrados con los nombres clásicos de Linux/Unix

Cambios en el arranque de Linux : systemctl

En la nueva versión de Oracle Linux (y RedHat) han optado por eliminar el tradicional método de arranque de servicios de /etc/init.d por el uso de systemctl.

Esta nueva funcionalidad cambia totalmente la manera de trabajar con los ficheros de arranque y parada de los servicios y, entre las supuestas virtudes de este sistema , personalmente no ha ninguna que me convezca.

En cualquier caso En esta web Uso de services de RedHat tenemos la información del funcionamiento de los comandos.

A modo de «bookmark» hago un copy & paste de dos tablas de ese documento que pueden sernos de utilidad

Correspondencia entre service y systemctl

Comparison of the service Utility with systemctl

Correspondencia entre chconfig y systemctl

omparison of the chkconfig Utility with systemctl