What is systemd
Back in the older days of UNIX systems most sites used SysV to manage all the start and stop scripts from /etc/init.d. Newer versions of Linux have switched over to systemd for managing services as well as to handle logging.
The systemctl command controls the services, while journalctl gives you access to the current system journal. All of the services can be finely tuned allowing for pre and post functions, specific requirements that must be met to start as well as a host of different options to configure how services are handled.
More information can be found at the bottom of this article.
Creating A Master Profile File
Create a new file, /etc/informix.conf:
INFORMIXDIR=/opt/informix
INFORMIXSERVER=test_tcp
ONCONFIG=onconfig.test
PATH=$PATH:/opt/informix/bin
Create a new service file, on RHEL and CentOS this will be in /etc/systemd/system/
/etc/systemd/system/informix.service:
[Unit]
Description=Informix server
Wants=basic.target
After=basic.target network.target
[Service]
Type=forking
User=informix
EnvironmentFile=/etc/informix.conf
ExecStart=/opt/informix/bin/oninit
ExecStop=/opt/informix/bin/onmode -kuy
TimeoutStartSec=1000
TimeoutStopSec=1000
[Install]
WantedBy=multi-user.target
Set Up the Service to Auto-start
systemctl daemon-reload
systemctl enable informix
Starting Informix From SystemD
First make sure Informix is stopped (onmode -kuy)
systemctl start informix
Monitoring Informix Status
systemctl status informix
informix.service - Informix server
Loaded: loaded (/etc/systemd/system/informix.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-01-30 11:32:57 EST; 58s ago
Process: 10034 ExecStart=/opt/informix/bin/oninit (code=exited, status=0/SUCCESS)
Main PID: 10036 (oninit)
Tasks: 9 (limit: 26213)
Memory: 153.5M
CGroup: /system.slice/informix.service
├─10036 /opt/informix/bin/oninit
├─10037 /opt/informix/bin/oninit
├─10038 /opt/informix/bin/oninit
├─10039 /opt/informix/bin/oninit
├─10040 /opt/informix/bin/oninit
├─10041 /opt/informix/bin/oninit
├─10042 /opt/informix/bin/oninit
├─10043 /opt/informix/bin/oninit
└─10044 /opt/informix/bin/oninit
Jan 30 11:32:47 miketest systemd[1]: Starting Informix server...
Jan 30 11:32:57 miketest systemd[1]: Started Informix server.
Issues with SELinux
SELinux is a new security system enabled on most Linux distributions by default. If you find Informix is blocked from running look for a SELinux message in the logs file and run the following.
ausearch -c '(oninit)' --raw | audit2allow -M my-oninit
semodule -i my-oninit.pp
/sbin/restorecon -v $INFORMIXDIR/bin/oninit
More Information
Basic commands for systemd https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal
Introductory Tutorial to systemd https://www.golinuxcloud.com/beginners-guide-systemd-tutorial-linux/
Fedora Based Deeper Dive https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/
RHEL 8.2 - Newer Versions of Systemd
Newer versions of Systemd throw errors if invalid lines are found in EnvironmentFile, if you have an 'export' line there to make the file universal as an include it will throw an error.
In that case instead of EnvironmentFile you can use the following Start and Stop commands:
ExecStart= /bin/bash -c '. /etc/informix.conf ; exec oninit'
ExecStop= /bin/bash -c '. /etc/informix.conf ; exec onmode -yuk'
Thanks to Doug Lawry for the tip.