快捷菜单
常用功能一站直达
更多功能请点顶栏「快捷菜单」
按 以下方法一: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 是 CentOS 7 的默认初始化系统,管理服务更规范,支持自动重启、日志查看等功能。
创建服务配置文件 /etc/systemd/system/goimgapi.service(文件名可自定义,后缀为 .service):
1vim /etc/systemd/system/goimgapi.service将以下内容粘贴到文件中,务必替换 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 模式(追加),与原命令行为一致。1systemctl daemon-reload1systemctl enable goimgapi.service1# 启动服务
2systemctl start goimgapi.service
3# 查看状态(确认是否启动成功)
4systemctl status goimgapi.serviceactive (running),则启动成功;journalctl -u goimgapi.service -f(实时日志)。重启服务器测试是否自动运行:
1reboot
2# 重启后查看进程
3ps -ef | grep main
4# 或查看服务状态
5systemctl status goimgapi.service若习惯传统脚本方式,可使用 /etc/rc.d/rc.local(CentOS 7 中默认禁用,需手动启用)。
1# 给 rc.local 添加执行权限(默认无)
2chmod +x /etc/rc.d/rc.local1vi /etc/rc.d/rc.local在文件末尾添加以下内容(替换程序路径和日志路径):
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 &1/etc/rc.d/rc.local
2# 查看进程是否启动
3ps -ef | grep main1reboot
2ps -ef | grep main服务启动失败:
journalctl -u goimgapi.service -f(重点看 ERROR 信息)。ExecStart 后的命令,排查程序本身是否能运行。开机自启不生效:
systemctl enable goimgapi.service(可通过 systemctl is-enabled goimgapi.service 查看是否启用)。chmod +x /etc/rc.d/rc.local),且命令路径正确。日志无输出:
chmod 755 /var/log/goimgapi/),确保运行用户有写入权限。 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"(根据实际环境变量修改)。
日历 · 精选 · 友链 · 更多
如果内容对你有帮助,欢迎请我喝杯咖啡 ☕



One的公众号
爱折腾博客的小白