方法一:手动编写 Systemd 服务文件(通用且推荐)
适用于所有可执行程序,无需依赖额外工具。
步骤 1:确定程序路径和工作目录
假设 nps
程序位于 /opt/nps
目录下(需替换为实际路径),执行命令为 ./nps start
,则:
- 工作目录(
WorkingDirectory
):/opt/nps
- 可执行文件路径(
ExecStart
):/opt/nps/nps
(需确保nps
有执行权限:chmod +x /opt/nps/nps
)
步骤 2:创建 Systemd 服务文件
在 /etc/systemd/system/
目录下创建服务文件(如 nps.service
):
sudo vi /etc/systemd/system/nps.service
写入以下内容(替换路径和用户):
[Unit]
Description=NPS Service # 服务描述
After=network.target # 网络就绪后启动(若依赖网络)
[Service]
Type=simple # 简单服务类型(前台运行,Systemd 跟踪进程)
User=root # 运行用户(建议改为非 root 用户,如创建 nps 用户)
Group=root # 运行用户组(同上)
WorkingDirectory=/opt/nps # 程序工作目录(替换为实际路径)
ExecStart=/opt/nps/nps start # 启动命令(替换为实际路径)
Restart=on-failure # 程序异常退出时自动重启
RestartSec=5s # 重启间隔 5 秒
StandardOutput=syslog # 标准输出重定向到系统日志
StandardError=syslog # 错误输出重定向到系统日志
SyslogIdentifier=nps # 日志标识(便于过滤)
[Install]
WantedBy=multi-user.target # 多用户环境下自动启动(系统启动时加载)
步骤 3:配置并启动服务
-
重新加载 Systemd 配置(每次修改服务文件后需执行):
sudo systemctl daemon-reload
-
设置开机自启:
sudo systemctl enable nps.service
-
启动服务:
sudo systemctl start nps.service
-
检查服务状态:
sudo systemctl status nps.service
- 若状态为
active (running)
,则配置成功。 - 若失败,可通过
journalctl -u nps.service -f
实时查看日志排查问题。
- 若状态为
方法二:使用 add-to-systemd
工具(Node.js 环境下简化配置)
若系统已安装 Node.js,可通过 add-to-systemd
工具自动生成服务文件,适合快速部署。
步骤 1:安装 add-to-systemd
npm install --global add-to-systemd
步骤 2:生成并配置服务
进入 nps
程序的工作目录(如 /opt/nps
),执行以下命令(替换路径和命令):
cd /opt/nps
add-to-systemd "nps start" --name=nps --cwd=/opt/nps --user=root
--name=nps
:服务名称为nps
。--cwd=/opt/nps
:指定工作目录。--user=root
:指定运行用户(建议改为非 root 用户)。
该命令会自动生成 /etc/systemd/system/nps.service
文件,并填充配置。
步骤 3:启动并验证服务
与方法一的步骤 3 相同:
sudo systemctl daemon-reload
sudo systemctl enable nps.service
sudo systemctl start nps.service
sudo systemctl status nps.service
关键注意事项
-
权限与安全:
- 建议创建独立用户(如
nps
)运行服务,避免使用 root:sudo useradd -r -s /sbin/nologin nps # 创建系统用户 sudo chown -R nps:nps /opt/nps # 赋予目录权限
并在服务文件中修改
User=nps
和Group=nps
。
- 建议创建独立用户(如
-
日志管理:
- 通过
journalctl -u nps.service
查看历史日志,或journalctl -u nps.service -f
实时跟踪。 - 若需将日志输出到文件,可修改
StandardOutput
为文件路径(如StandardOutput=/var/log/nps.log
)。
- 通过
-
服务依赖:
- 若
nps
依赖数据库、Redis 等服务,需在[Unit]
中添加After=mysql.service redis.service
(替换为实际服务名)。
- 若
评论一下?