A U T O M 8 N
1.0

Computer Systems

  • Installation of ArchLinux on x86
  • systemd and related stuff
    • Spawning multiple php-fpm masters using systemd socket activation
    • mount local or remote filesystems using systemd
  • Data Migration Specifc notes
  • Find Command
  • Install cPanel
  • Clean Zone
  • Cluster permission fix
  • AUTOM8N cluster on CloudLinux
  • Supported CloudLinux technologies
  • reset mysql replication
  • AUTOM8N cluster with Cloudflare Traffic LoadBalancing
  • Grant access to Autom8n.com sysadmins
A U T O M 8 N
  • »
  • systemd and related stuff

systemd and related stuff¶

Spawning multiple php-fpm masters using systemd socket activation¶

AUTOM8N being a nginx addon for cPanel and used in environment where user level seperation of web data is a requirement needed a way to run multiple php-fpm master process .The primary concern for such a system is the requirement of a process control manager like supervisord to manage the master php-fpm process for all the users and all the different php version that a user may switch to.

systemd provided a neat solution for this .

The reference for this is

https://wiki.php.net/rfc/socketactivation

http://thanatos.be/2014/04/12/php-fpm-ondemand.html

While the solutions mentioned above are for a system that mostly needs a single or a few such process to be spawned .I have used systemd’s templating ability for service and socket units to make the solution scale for all users and if required for multiple versions It does require a third party script to control systemd and create the php-fpm config file ;which in my case was done by the XtendWeb cPanel nginx plugin

So here is the config 1. Create the systemd socket template /usr/lib/systemd/system/CPANELPHP56@.socket

[Socket]
ListenStream=/opt/cpanel/ea-php56/var/run/%i.sock
SocketMode=0660
SocketUser=%i
SocketGroup=nobody

[Install]
WantedBy=sockets.target

2. Create the systemd service template /usr/lib/systemd/system/CPANELPHP56@.service Note that the socket and service names must match

[Service]
User=%i
Group=nobody
Environment="FPM_SOCKETS=/opt/cpanel/ea-php56/var/run/%i.sock=3"
ExecStart=/opt/cpanel/ea-php56/usr/sbin/php-fpm --prefix=/opt/cpanel/ea-php56 --fpm-config=/opt/nDeploy/secure-php-fpm.d/%i.conf
KillMode=process

Once this is done the only requirement is create the php-fpm config file at /opt/nDeploy/secure-php-fpm.d/cpaneluser.conf

Start the socket by

systemctl enable CPANELPHP56@myuser.socket
systemctl start CPANELPHP56@myuser.socket

You can see that systemd starts the socket and when a request comes to the socket for the first time ; it will spawn the corresponding service .

The Environment=”FPM_SOCKETS=/opt/cpanel/ea-php56/var/run/%i.sock=3” is a requirement as otherwise the php-fpm service will try to bind to the socket which will then fail. with the above variable set php-fpm will just reuse the socket

A downside of the above setup is that unused master process are not terminated . We can use a cron job to achieve this or just leave the process idling there.

mount local or remote filesystems using systemd¶

In this example I will describe how systemd can be used to mount remote NFS or CIFS in an ondemand automatic way

This is similar to socket activated service . We define a automount point that when accessed mount a filesytem using details mentioned in a corresponding mount unit file.

# cat /etc/systemd/system/media-backup.automount
[Unit]
  Description=Remote cifs backup mount script
  Requires=network-online.target
  After=network-online.service

[Automount]
  Where=/media/backup
  TimeoutIdleSec="300s"

[Install]
  WantedBy=multi-user.target

Note that the automount file conveniently omits what is to be mounted and how etc as this part must be defined in the corresponding mount unit file. Note also the peculiarity in the name of the unit file . It must be named media-backup.automount as it is mounting to /media/backup. Similarly if you are mounting to /a/b/c, the file must be named a-b-c.automount

Now lets see the corresponding mount unit file that is called by the automount

# cat /etc/systemd/system/media-backup.mount
[Unit]
  Description=Remote cifs backup mount script
  Requires=network-online.target
  After=network-online.service

[Mount]
  What=//remoteshare.your-domain.com/backup
  Where=/media/backup
  Options=username=xyz,password=mysecurepass,rw
  Type=cifs

[Install]
  WantedBy=multi-user.target

The mount unit must be named the same as the automount unit .You can also see that since the CIFS needs network service to be up and running to connect; the unit file takes care of this requirement using the After= option

Next Previous

© Copyright 2017, A U T O M 8 N.

Built with Sphinx using a theme provided by Read the Docs.