--
:
--
:
--
hugo-teek is loading...
go壁纸api开机自启
最后更新于:
go壁纸api开机自启
说明(亲测有效)
按 以下方法一:systemd 服务(推荐)配置即可,亲测有效。
问题
1如何把 nohup ./main -port 8080 >> goimgapi_stdout.log 2>> goimgapi_stderr.log & 这条命令放在开机自启脚本里呢?(系统是cnetos7)
回答
在 CentOS 7 中,推荐使用 systemd 服务实现开机自启(官方首选,稳定可靠),替代传统的 rc.local 方式。以下是详细步骤,包含脚本编写、服务配置、测试验证全流程:
一、核心前提(必看)
- 明确
main程序的 绝对路径(不能用相对路径./main,开机时工作目录不固定),例如:/opt/goimgapi/main(请替换为你的实际路径)。 - 确保日志目录可写(若日志路径不存在,需提前创建),例如:
/var/log/goimgapi/(避免权限不足导致启动失败)。 - 先手动测试原命令是否能正常运行(排除程序本身问题):测试成功后(进程存在、日志有输出),再配置自启。
1nohup /opt/goimgapi/main -port 8080 >> /var/log/goimgapi/goimgapi_stdout.log 2>> /var/log/goimgapi/goimgapi_stderr.log &
二、方法一:systemd 服务(推荐)✅
systemd 是 CentOS 7 的默认初始化系统,管理服务更规范,支持自动重启、日志查看等功能。
步骤 1:创建 systemd 服务文件
创建服务配置文件 /etc/systemd/system/goimgapi.service(文件名可自定义,后缀为 .service):
1vim /etc/systemd/system/goimgapi.service
步骤 2:写入服务配置内容
将以下内容粘贴到文件中,务必替换 3 处占位符(ExecStart 中的程序路径、日志路径):
1[Unit]
2# 服务描述
3Description=GoImgAPI Service
4# 依赖网络(确保网络启动后再运行服务,按需添加)
5After=network.target
6
7[Service]
8# 运行用户(推荐用普通用户,如 appuser;若需 root 则写 root)
9User=root
10# 工作目录(程序运行的基准目录,若程序依赖相对路径则配置,否则可省略)
11WorkingDirectory=/root/img-server-fxj
12# 核心执行命令(无需 nohup 和 &,systemd 自动后台管理),主要配置下这里的位置即可!!!
13ExecStart=/root/img-server-fxj/main -port 8080
14# 标准输出重定向(对应原命令的 >> stdout.log)
15StandardOutput=append:/var/log/goimgapi/goimgapi_stdout.log
16# 标准错误重定向(对应原命令的 2>> stderr.log)
17StandardError=append:/var/log/goimgapi/goimgapi_stderr.log
18# 进程退出后自动重启(可选,推荐开启,增强稳定性)
19Restart=always
20# 重启间隔(秒)
21RestartSec=3
22
23[Install]
24# 开机自启的目标级别(多用户模式,默认级别)
25WantedBy=multi-user.target

- 关键说明:
- 无需
nohup和&:systemd 会自动将服务运行在后台,且能监控进程状态。 Restart=always:若程序崩溃,systemd 会自动重启(按需关闭,改为no即可)。- 日志用
append模式(追加),与原命令行为一致。
- 无需
步骤 3:生效服务配置并启动
- 重载 systemd 配置(修改服务文件后必须执行):
1systemctl daemon-reload - 设置开机自启:
1systemctl enable goimgapi.service - 启动服务并查看状态:
1# 启动服务 2systemctl start goimgapi.service 3# 查看状态(确认是否启动成功) 4systemctl status goimgapi.service- 若状态显示
active (running),则启动成功; - 若失败,查看错误日志:
journalctl -u goimgapi.service -f(实时日志)。
- 若状态显示
步骤 4:验证开机自启(可选)
重启服务器测试是否自动运行:
1reboot
2# 重启后查看进程
3ps -ef | grep main
4# 或查看服务状态
5systemctl status goimgapi.service
三、方法二:rc.local 脚本(备用)
若习惯传统脚本方式,可使用 /etc/rc.d/rc.local(CentOS 7 中默认禁用,需手动启用)。
步骤 1:启用 rc.local 执行权限
1# 给 rc.local 添加执行权限(默认无)
2chmod +x /etc/rc.d/rc.local
步骤 2:编辑 rc.local 脚本
1vi /etc/rc.d/rc.local
步骤 3:添加自启命令(必须用绝对路径)
在文件末尾添加以下内容(替换程序路径和日志路径):
1# 延迟 5 秒启动(避免系统未初始化完成导致失败,可选)
2sleep 5
3# 原命令修改为绝对路径(保留 nohup 和 &)
4nohup /opt/goimgapi/main -port 8080 >> /var/log/goimgapi/goimgapi_stdout.log 2>> /var/log/goimgapi/goimgapi_stderr.log &
步骤 4:验证
- 手动执行 rc.local 测试是否生效:
1/etc/rc.d/rc.local 2# 查看进程是否启动 3ps -ef | grep main - 重启服务器验证自启:
1reboot 2ps -ef | grep main
四、常见问题排查
服务启动失败:
- 查看 systemd 日志:
journalctl -u goimgapi.service -f(重点看ERROR信息)。 - 检查程序路径是否正确(绝对路径!)、日志目录是否存在且可写。
- 手动执行
ExecStart后的命令,排查程序本身是否能运行。
- 查看 systemd 日志:
开机自启不生效:
- systemd 方式:确认已执行
systemctl enable goimgapi.service(可通过systemctl is-enabled goimgapi.service查看是否启用)。 - rc.local 方式:确认已添加执行权限(
chmod +x /etc/rc.d/rc.local),且命令路径正确。
- systemd 方式:确认已执行
日志无输出:
- 检查日志路径的权限(例如
chmod 755 /var/log/goimgapi/),确保运行用户有写入权限。
- 检查日志路径的权限(例如
五、常用命令(systemd 方式)
1# 启动服务
2systemctl start goimgapi.service
3# 停止服务
4systemctl stop goimgapi.service
5# 重启服务
6systemctl restart goimgapi.service
7# 查看状态
8systemctl status goimgapi.service
9# 禁用开机自启
10systemctl disable goimgapi.service
11# 查看实时日志
12journalctl -u goimgapi.service -f
推荐优先使用 systemd 方式,不仅实现开机自启,还能自动重启崩溃的程序,便于运维管理。如果程序依赖特殊环境变量(如 Go 环境),可在 ExecStart 前添加 Environment="PATH=/usr/local/go/bin:$PATH"(根据实际环境变量修改)。
📡
👤
作者:
余温Gueen
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
余温Gueen Blog!
推荐使用微信支付

推荐使用支付宝
