CentOS上运行Golang脚本需完成环境配置、编写编译、权限修正及打包部署。常用yum或手动安装Go,配置环境变量。编译生成可执行文件,解决fork/exec权限问题需添加执行权限、调整SELinux。通过cron或systemd实现定时任务与守护进程。
CentOS上运行Golang脚本的技巧
时间:2026-07-17
浏览:539
文章目录
在 CentOS 上运行 Golang 脚本,看似简单,实际动手时环境搭建、权限设置、部署方式等细节容易卡顿。以下梳理完整流程与常见问题,帮助提升效率。
1. 环境准备:CentOS 下正确安装与配置 Golang 环境
开始前先安装 Go 环境。三种主流方式可根据需求选择:
- yum 包管理器(快速简便):
sudo yum update -y && sudo yum install epel-release -y && sudo yum install golang -y - 手动下载二进制包(推荐最新稳定版):
wget https://golang.org/dl/go1.22.0.linux-amd64.tar.gz && sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz - Docker 安装(隔离性好):
sudo docker pull golang:latest,然后通过容器运行脚本。

安装后配置环境变量,避免每次输入完整路径。编辑 ~/.bashrc 或 ~/.bash_profile,添加以下内容:
export GOROOT=/usr/local/go # Go 安装目录
export GOPATH=$HOME/go # 工作目录
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin # 将 Go 命令加入 PATH
export GO111MODULE=on # 启用 Go 模块(推荐)
执行 source ~/.bashrc 使配置生效。最后用 go version 验证,输出版本号即表示成功。
2. 编写与运行基础 Golang 脚本
创建项目目录并编写脚本:
mkdir -p $HOME/go/src/myproject && cd $HOME/go/src/myproject
nano main.go
# 输入示例代码:打印系统信息
以下 main.go 示例执行系统命令获取信息:
package main
import (
"fmt"
"os/exec"
)
func main() {
// 执行 shell 命令获取系统信息
out, err := exec.Command("uname", "-a").Output()
if err != nil {
fmt.Println("执行命令失败:", err)
return
}
fmt.Println("系统信息:\n", string(out))
}
编译并运行:
go build -o myscript # 编译为可执行文件
./myscript # 运行程序
输出效果类似:系统信息: Linux centos7 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux。
3. 常见错误解决:权限与配置问题
实际运行中最常见错误是 “fork/exec permission denied”,可按以下步骤排查:
- 添加执行权限:
chmod +x your_script.go,确保脚本有可执行权限。 - 修改文件所有者:
sudo chown $USER your_script.go,保证当前用户拥有文件所有权。 - 设置临时目录:
export TMPDIR=~/tmp/,避免/tmp目录权限不足(需提前创建~/tmp目录)。 - 调整 SELinux 设置:
编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启服务器。此步骤临时关闭 SELinux,防止其拦截进程。 - 增加文件描述符限制:
ulimit -n 65535,提高系统允许的最大文件描述符数量,避免因打开文件过多而报错。
4. 打包与发布:简化部署流程
Golang 编译后的可执行文件不依赖 Go 环境,直接部署到目标机器即可运行。打包命令:
cd $HOME/go/src/myproject
GOOS=linux GOARCH=amd64 go build -o myapp # 编译为 Linux 下的可执行文件
为方便启动,创建运行脚本 run.sh:
#!/bin/bash
echo "Starting application..."
./myapp
添加权限:chmod +x run.sh。将程序和脚本打包:tar -czvf myapp.tar.gz myapp run.sh。上传到目标服务器,解压后执行 ./run.sh 即可启动。
5. 进阶技巧:定时任务与守护进程
若希望脚本定期执行或作为服务运行,可使用以下两种方案。
定时任务(cron)
使用系统 cron 或第三方库(如 github.com/gorhill/cronexpr)实现。最简单方式:
crontab -e
添加一行,例如每5分钟执行一次:
*/5 * * * * /path/to/your_script.sh
守护进程(systemd)
若希望在程序崩溃后自动重启,使用 systemd 管理更省心。创建服务文件 /etc/systemd/system/myapp.service:
[Unit]
Description=My Golang Application
After=network.target
[Service]
User=root
ExecStart=/path/to/myapp
Restart=always # 崩溃后自动重启
[Install]
WantedBy=multi-user.target
然后依次执行:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
检查状态:sudo systemctl status myapp。这样 Go 程序将像系统服务一样稳定运行。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。