Author: Andy Pieters
Viewers: 597
Last month viewers: 6
Package: PHP Systemd Daemon Notify
Read this article to learn how you can take advantage of the systemd software to simplify the implementation of your own long running PHP processes.
In this article you will learn:
What is Linux Systemd?
How to Take Advantage of Linux Systemd in Your PHP Applications
How to Download PHP Systemd Daemon Notify Package or Install it with PHP Composer
What is Linux Systemd?
Systemd is a set of software blocks that makes part of current Linux distributions to help building tools that perform tasks that can take a long time to finish, like for instance sending newsletters to many subscribers.
Systemd has been around for more than 11 years now and is now quite ubiquitous in the Linux world.
The main task of Systemd is to start, stop, and monitor programs that implement services.
Service programs are described in simple configuration files. These files are highly portable between different Linux distributions.
Services can talk back to systemd through a notification socket connection. Using this connection, they can give a brief status description of the service, tell systemd what is the main process identifier number (PID), among other details.
Of particular interest are the notifications of type "READY" and "WATCHDOG"
The "READY" type notification tells systemd that the service has successfully started and is up and running.
The "WATCHDOG" type notification are called heartbeats and can tell systemd that the service is still alive and working correctly.
In combination with the service description in the configuration file and the WATCHDOG heartbeats, systemd can detect when the service needs to be restarted.
The benefit of using this system is that you have much more fine-grained control on how quickly your service is restarted during an error condition, as well that the service only is restarted when there is an actual problem.
We can also provide a status message to Systemd which will be displayed when you execute the following command, on which service is the name of the service process that is enquired to get its status.
systemctl status service
How to Take Advantage of Linux Systemd in Your PHP Applications
The PHP Systemd Daemon Notify package can be used to help you taking advantage of the Linux Systemd in your PHP applications.
To show you how can you use this in practice, I have provided an example service to show this in action. You can find the example code in Github or here in the PHP Classes site.
Installing the Example
After downloading the example code to /opt/systemd-notify/examples/lookupd directory and switching to it, all we have to do is composer install followed by sudo install lookupd.serviceRunning and Testing the Daemon
Starting the daemon now is as easy as just asking systemd to start it using the command:
sudo systemctl start lookupd
If the service started correctly, no further output is produced.
Let's ask systemd how our service is doing:
[Andy@Awesome lookupd]$ sudo systemctl status lookupd
lookupd.service - Example service to lookup hostnames
Loaded: loaded (/etc/systemd/system/lookupd.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2017-10-29 15:00:01 GMT; 5s ago
Main PID: 32033 (php)
Status: "Listening on 127.0.0.1:7777; Served 0 client(s)"
Tasks: 1 (limit: 4915)
CGroup: /system.slice/lookupd.service
└─32033 /usr/bin/php /opt/systemd-notify/examples/lookupd/lookupd-start.php
This output tells us several things. It shows that the service is running properly. It is sending heartbeat (watchdog) events. It shows a status message.
A script has also been provided to test the daemon. Let's run that a couple of times:
[Andy@Awesome lookupd]$ for counter in {1..10}; do php test-lookup.php; done localhost.localdomain localhost.localdomain localhost.localdomain localhost.localdomain localhost.localdomain localhost.localdomain localhost.localdomain localhost.localdomain localhost.localdomain localhost.localdomain
Now check the status again:
[Andy@Awesome lookupd]$ sudo systemctl status lookupd
lookupd.service - Example service to lookup hostnames
Loaded: loaded (/etc/systemd/system/lookupd.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2017-10-29 15:09:05 GMT; 9min ago
Main PID: 32033 (php)
Status: "Listening on 127.0.0.1:7777; Served 10 client(s)"
Tasks: 1 (limit: 4915)
CGroup: /system.slice/lookupd.service
└─32033 /usr/bin/php /opt/systemd-notify/examples/lookupd/lookupd-start.php
Of course this is a contrived example but it clearly demonstrates how this package can be used in your own services.
How to Download PHP Systemd Daemon Notify Package or Install it with PHP Composer
You can use this package by downloading its code from the download page or install it using the PHP Composer tool following the instructions in the package install page.
If you liked comment on this package and the article, please post a comment below, so I can know more how you liked and hopefully I can improve it further.
You need to be a registered user or login to post a comment
Login Immediately with your account on:
Comments:
No comments were submitted yet.