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 方式。以下是详细步骤,包含脚本编写、服务配置、测试验证全流程:

一、核心前提(必看)

  1. 明确 main 程序的 绝对路径(不能用相对路径 ./main,开机时工作目录不固定),例如:/opt/goimgapi/main(请替换为你的实际路径)。
  2. 确保日志目录可写(若日志路径不存在,需提前创建),例如:/var/log/goimgapi/(避免权限不足导致启动失败)。
  3. 先手动测试原命令是否能正常运行(排除程序本身问题):
    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

image-20251201073856269

  • 关键说明:
    • 无需 nohup&:systemd 会自动将服务运行在后台,且能监控进程状态。
    • Restart=always:若程序崩溃,systemd 会自动重启(按需关闭,改为 no 即可)。
    • 日志用 append 模式(追加),与原命令行为一致。

步骤 3:生效服务配置并启动

  1. 重载 systemd 配置(修改服务文件后必须执行):
    1systemctl daemon-reload
    
  2. 设置开机自启:
    1systemctl enable goimgapi.service
    
  3. 启动服务并查看状态:
    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:验证

  1. 手动执行 rc.local 测试是否生效:
    1/etc/rc.d/rc.local
    2# 查看进程是否启动
    3ps -ef | grep main
    
  2. 重启服务器验证自启:
    1reboot
    2ps -ef | grep main
    

四、常见问题排查

  1. 服务启动失败:

    • 查看 systemd 日志:journalctl -u goimgapi.service -f(重点看 ERROR 信息)。
    • 检查程序路径是否正确(绝对路径!)、日志目录是否存在且可写。
    • 手动执行 ExecStart 后的命令,排查程序本身是否能运行。
  2. 开机自启不生效:

    • systemd 方式:确认已执行 systemctl enable goimgapi.service(可通过 systemctl is-enabled goimgapi.service 查看是否启用)。
    • rc.local 方式:确认已添加执行权限(chmod +x /etc/rc.d/rc.local),且命令路径正确。
  3. 日志无输出:

    • 检查日志路径的权限(例如 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"(根据实际环境变量修改)。

推荐使用微信支付
微信支付二维码
推荐使用支付宝
支付宝二维码
最新文章

文档导航