你好,我正在尝试使用 nginx 命令行在重启时自动启动 nginx,但我无法使用该服务,因为我需要以非 root 用户身份运行它。我在 crontab 中添加了一个条目,以便在重启时调用该脚本,但仍然无法启动该服务。但是,当我正常运行脚本时,它可以工作,但在重启时却无法工作。
crontab -e
@reboot bash start_nginx.sh
启动nginx
#!/bin/bash
/usr/sbin/nginx -c /opt/nginx/nginx.conf
答案1
我能够使用 systemd 在 Ubuntu 18.04 和 nginx 1.14 中以非 root 用户身份自动启动 nginx。下面分 4 个步骤进行说明
- 创建用户并配置必需文件的权限
- 配置新的默认端口
- 设置守护进程将在以下用户下启动
- 启用自动启动,启动服务并验证
创建用户并配置必需文件的权限
我找到了指南这里对我定位自己和为非 root 用户配置一些较难找到的 nginx 文件权限非常有帮助。
关于日志权限,/var/log/nginx
我通过向用户添加 adm 组并chmod
赋予权限来处理这个问题。
$ sudo usermod -G <your group>,adm <your user>
`$ sudo chmod 664 /var/log/nginx/*.log
请注意,adm 组有权访问整个系统的日志文件,并可以运行 xconsole 查看 adm 组拥有的文件
$ sudo find / -group adm
请注意,其他脚本可能会尝试更改 /var/log 中的权限,请参阅这里。我添加了覆盖
$ sudo dpkg-statoverride --add www-data adm 664 /var/log/nginx/error.log
$ sudo dpkg-statoverride --add www-data adm 664 /var/log/nginx/access.log
配置新的默认端口
我们需要这样做,因为非 root 用户无法绑定到端口 < 1024 修改指定的侦听器,/etc/nginx/nginx.conf
因此未设置 < 1024
$ sudo nano /etc/nginx/nginx.conf
server {
listen 8443;
}
并修改 /etc/nginx/sites-available/default 以更改默认监听端口 80
server {
listen 8000 default_server;
listen[::]:8000 default_server;
...
}
设置用户守护进程将在(编辑)下启动
感谢 Michael Hampton 的评论。请注意,我/lib/systemd/system
通过阅读这篇文章找到了 nginx 服务文件nginx 文档,但不要修改 中的任何内容,而是/lib/systemd/system
将文件复制到/etc/systemd/system
并在那里进行修改,包括 下面的两行新行,[Service]
用于要在其下运行 nginx 的用户和组
$ sudo cp /lib/systemd/system/nginx.service /etc/systemd/system
$ sudo nano /lib/systemd/system/nginx.service
...
[Service]
User=<your user>
Group=<your user's group>
...
(注意,此 nginx 服务文件位置可能因 nginx 的不同编译而不同)
启用自动启动,启动服务并验证
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ sudo systemctl status nginx
你最终会得到类似这样的结果
$ ps aux | grep nginx
nginx 1523 0.0 0.0 132216 1552 ? Ss 06:12 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
nginx 1524 0.0 0.0 132628 5720 ? S 06:12 0:00 nginx: worker process
nginx 1525 0.0 0.0 132628 2428 ? S 06:12 0:00 nginx: worker process
nginx 1526 0.0 0.0 132628 2428 ? S 06:12 0:00 nginx: worker process
nginx 1527 0.0 0.0 132628 2428 ? S 06:12 0:00 nginx: worker process
nginx 1528 0.0 0.0 132628 2428 ? S 06:12 0:00 nginx: worker process
nginx 1529 0.0 0.0 132628 2428 ? S 06:12 0:00 nginx: worker process
nginx 1530 0.0 0.0 132628 2428 ? S 06:12 0:00 nginx: worker process
nginx 1531 0.0 0.0 132628 2428 ? S 06:12 0:00 nginx: worker process
甚至主进程也没有以 root 身份运行(我认为这很酷!)