要将 Nginx 配置为服务,你需要创建一个 systemd 服务单元文件。以下是一个基本的示例:
vi /etc/systemd/system/nginx.service
然后将如下配置粘贴到该文件中:
[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=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
Restart=always # 或者 on-failure, on-abnormal, etc. 根据需要设置重启策略
RestartSec=3 # 重启间隔,单位秒,仅当设置了Restart时有效
WantedBy=multi-user.target
# 添加以下两行以将标准输出和标准错误输出重定向到日志文件
StandardOutput=file:/var/log/myapp/output.log
StandardError=file:/var/log/myapp/error.log
保存并关闭文件。然后,你可以启动 Nginx 服务并设置为在启动时启动:
systemctl start nginx
systemctl enable nginx
这样,Nginx 就会以服务方式启动了。如果你需要查看 Nginx 服务的状态,你可以使用 systemctl status nginx
命令。
配置文件含义说明
[Unit]
部分包含了服务的描述和它在启动过程中的位置。Description
是服务的简短描述。After
定义了此服务应在哪些其他服务之后启动。
[Service]
部分定义了服务的启动方式。Type=forking
表示这个服务会派生出子进程。PIDFile
是主进程的 PID 文件路径。ExecStartPre
是在服务启动前执行的命令,这里是检查 Nginx 配置的有效性。ExecStart
是启动服务的命令。ExecReload
和 ExecStop
分别是重新加载和停止服务的命令。PrivateTmp=true
表示服务有自己的临时目录。
[Install]
部分定义了服务的安装目标。WantedBy=multi-user.target
表示这个服务应该在多用户模式下启动。
如果需要配置日志文件自动分割,可以按照下面的说明进行操作。
为了按文件大小自动分割日志文件,可以使用 logrotate 工具。首先,确保系统已安装 logrotate:
sudo apt-get install logrotate -y # 对于基于Debian的系统
sudo yum install logrotate -y # 对于基于RHEL的系统
然后,在/etc/logrotate.d/目录下创建一个名为 my_program 的配置文件:
sudo nano /etc/logrotate.d/my_program
输入以下内容:
/var/log/my_program.log {
daily # 每天执行一次日志切割
rotate 7 # 保留最近7个归档文件
size=10M # 当文件大小达到10MB时进行切割
compress # 压缩归档文件以节省磁盘空间
delaycompress # 延迟压缩当前日志,以便在切割后立即可用
missingok # 如果日志文件不存在,不报错
notifempty # 如果日志文件为空,不进行切割
create 640 <your_user> adm # 创建新日志文件,权限和属主(根据实际情况调整)
}
保存并关闭文件。这样,logrotate 就会每天检查/var/log/my_program.log 文件,当其大小达到 10MB 时进行切割,并保留最近 7 个归档文件。
启用并启动服务
更新 Systemd 配置并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable my_program.service
sudo systemctl start my_program.service
现在,您的程序作为 Systemd 服务运行,并且其标准输出被保存到/var/log/my_program.log 文件中。logrotate 会根据配置自动进行日志文件的分割和管理。您可以使用 journalctl 命令查看服务的日志:
sudo journalctl -u my_program.service
或者直接查看日志文件:
cat /var/log/my_program.log