为 Nginx 配置 systemd 服务

当使用编译安装 Nginx 后,同样希望将 Nginx 加入至 systemd 进行管理,如果可以的话希望进一步对该 Nginx 进行区分。

阅读

首先需要了解一下 yum 安装的 Nginx 配置:

systemctl cat nginx.service

# /lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

接着可以阅读下官网的示例open in new window

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

操作

1. 下载

cd /usr/local/src # /usr/src 常用于存放内核源码

接着按照之前操作。

2. 编译

./configure --help | less # 查看帮助
./configure --prefix=/usr/local/nginx # 指定目录
make # 编译
make install # 安装

/usr/local/nginx -V # 验证 

3. 配置

nginx 配置:

# 启用 pid 路径
vim /usr/local/nginx/conf/nginx.conf

systemd 配置:

vim /usr/lib/systemd/system/nginx-compile.service # 此处自定义命名为 nginx-compile

# 添加如下内容
[Unit]
Description=nginx(compile) - high performance web server
Documentation=http://nginx.org/en/docs/
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
# 官网示例如下,但个人使用的为上面两种,尚分不清好坏
# ExecReload=/bin/kill -s HUP $MAINPID
# ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

4. 验证

systemctl status nginx-compile.service # 显示正确后即可执行 systemctl 套件
systemctl start nginx-compile.service
systemctl enable nginx-compile.service
systemctl status nginx-compile.service # 验证