1. 环境准备:正确安装与配置Golang
在CentOS上运行Golang脚本前,需先完成环境搭建。可通过以下方式安装:
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;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. 常见错误解决:权限与配置问题
chmod +x your_script.go(确保脚本有可执行权限);sudo chown $USER your_script.go(确保当前用户拥有文件所有权);export TMPDIR=~/tmp/(避免/tmp目录权限不足,需提前创建~/tmp目录);/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:
nano run.sh
run.sh内容:
#!/bin/bash
echo "Starting application..."
./myapp
添加执行权限:chmod +x run.sh。
打包程序与脚本:tar -czvf myapp.tar.gz myapp run.sh。
发布与运行:将myapp.tar.gz上传至目标服务器,解压后执行./run.sh即可启动程序。
5. 进阶技巧:定时任务与守护进程
cron或第三方库(如github.com/gorhill/cronexpr)实现定时执行。示例(每5分钟执行一次):crontab -e
添加以下内容:*/5 * * * * /path/to/your_script.sh
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。