mirror of
https://github.com/systemd/systemd
synced 2024-09-06 16:56:43 +00:00
122 lines
2.8 KiB
Markdown
122 lines
2.8 KiB
Markdown
---
|
|
title: Socket Activation with Popular Daemons
|
|
category: Manuals and Documentation for Users and Administrators
|
|
layout: default
|
|
SPDX-License-Identifier: LGPL-2.1-or-later
|
|
---
|
|
|
|
## nginx
|
|
|
|
nginx includes an undocumented, internal socket-passing mechanism based on the `NGINX` environmental variable.
|
|
It uses this to perform reloads without having to close and reopen its sockets, but it's also useful for socket activation.
|
|
|
|
**/etc/nginx/my-nginx.conf**
|
|
|
|
```
|
|
http {
|
|
server {
|
|
listen [::]:80 ipv6only=on;
|
|
listen 80;
|
|
}
|
|
}
|
|
```
|
|
|
|
**/etc/systemd/system/my-nginx.service**
|
|
|
|
```
|
|
[Service]
|
|
User=nginx
|
|
Group=nginx
|
|
Environment=NGINX=3:4;
|
|
ExecStart=/usr/sbin/nginx -c/etc/nginx/my-nginx.conf
|
|
PrivateNetwork=true
|
|
```
|
|
|
|
**/etc/systemd/system/my-nginx.socket**
|
|
|
|
```
|
|
[Unit]
|
|
After=network.target
|
|
Requires=network.target
|
|
|
|
[Socket]
|
|
ListenStream=80
|
|
ListenStream=0.0.0.0:80
|
|
BindIPv6Only=ipv6-only
|
|
|
|
[Install]
|
|
WantedBy=sockets.target
|
|
```
|
|
|
|
## PHP-FPM
|
|
|
|
Like nginx, PHP-FPM includes a socket-passing mechanism an environmental variable.
|
|
In PHP-FPM's case, it's `FPM_SOCKETS`.
|
|
|
|
This configuration is possible with any web server that supports FastCGI (like Apache, Lighttpd, or nginx).
|
|
The web server does not need to know anything special about the socket; use a normal PHP-FPM configuration.
|
|
|
|
Paths are based on a Fedora 19 system.
|
|
|
|
### First, the configuration files
|
|
|
|
**/etc/php-fpm.d/my-php-fpm-pool.conf**
|
|
|
|
```
|
|
[global]
|
|
pid = /run/my-php-fpm-pool.pid ; Not really used by anything with daemonize = no, but needs to be writable.
|
|
error_log = syslog ; Will aggregate to the service's systemd journal.
|
|
daemonize = no ; systemd handles the forking.
|
|
|
|
[www]
|
|
listen = /var/run/my-php-fpm-pool.socket ; Must match systemd socket unit.
|
|
user = nginx ; Ignored but required.
|
|
group = nginx ; Ignored but required.
|
|
pm = static
|
|
pm.max_children = 10
|
|
slowlog = syslog
|
|
```
|
|
|
|
**/etc/systemd/system/my-php-fpm-pool.service**
|
|
|
|
```
|
|
[Service]
|
|
User=nginx
|
|
Group=nginx
|
|
Environment="FPM_SOCKETS=/var/run/my-php-fpm-pool.socket=3"
|
|
ExecStart=/usr/sbin/php-fpm --fpm-config=/etc/php-fpm.d/my-php-fpm-pool.conf
|
|
KillMode=process
|
|
```
|
|
|
|
**/etc/systemd/system/my-php-fpm-pool.socket**
|
|
|
|
```
|
|
[Socket]
|
|
ListenStream=/var/run/my-php-fpm-pool.socket
|
|
|
|
[Install]
|
|
WantedBy=sockets.target
|
|
```
|
|
|
|
### Second, the setup commands
|
|
|
|
```sh
|
|
sudo systemctl --system daemon-reload
|
|
sudo systemctl start my-php-fpm-pool.socket
|
|
sudo systemctl enable my-php-fpm-pool.socket
|
|
```
|
|
|
|
After accessing the web server, the service should be running.
|
|
|
|
```sh
|
|
sudo systemctl status my-php-fpm-pool.service
|
|
```
|
|
|
|
It's possible to shut down the service and re-activate it using the web browser, too.
|
|
It's necessary to stop and start the socket to reset some shutdown PHP-FPM does that otherwise breaks reactivation.
|
|
|
|
```sh
|
|
sudo systemctl stop my-php-fpm-pool.socket my-php-fpm-pool.service
|
|
sudo systemctl start my-php-fpm-pool.socket
|
|
```
|