golang编译程序在linux上的部署

core1988 · · 1582 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

本文主要介绍在window环境下,使用开发工具liteide对go程序进行交叉编译(在一个平台上生成另一个平台的可执行程序),将生成的可执行文件部署在Linux服务器上,使我们开发的程序能直接运行在linux上。

开发环境

开发环境为 :windows

开发IDE为:liteidex


操作步骤

1.交叉编译

Windows 下编译 Linux 64位可执行程序,这里需要解释一下

GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)

GOARCH:目标平台的体系架构(386、amd64、arm) 交叉编译不支持 CGO 所以要禁用它

具体命令如下:

SET CGO_ENABLED=0

SET GOOS=linux

SET GOARCH=amd64

go build main.go


首先进入cmd命令行,cd到go环境的安装目录下的src目录;然后依次执行以下命令(执行前先安装tdm64-gcc-4.8.1-3):

set GOOS=linux

set GOARCH=386

set CGO_ENABLED=0

make.bat


如果要生成64位linux下的运行程序则依次输入下列命令:

set GOOS=linux

set GOARCH=amd64

set CGO_ENABLED=0

make.bat


如果要生成arm6下的运行程序则依次输入下列命令:

set GOOS=linux

set GOARCH=arm

set GOARM=6

set CGO_ENABLED=0

make.bat


例如:我将go环境安装在D:\Go下,并且我要生成64位linux下的运行程序;则我需要在cmd命令行下输入:

C:\Users\Administrator>d:

D:\>cd d:/go/src

d:\Go\src> set GOOS=linux

d:\Go\src> set GOARCH=amd64

d:\Go\src> set CGO_ENABLED=0

d:\Go\src> make.bat


2.执行完第一步后,就可以在IDE中对GO程序进行交叉编译了;在IDE中将编译的环境变量设置为cross-linux64(根据需要选择),然后点击查看编辑环境变量,根据go的安装配置好设置信息,保存!

3.进入到程序的工作路径(即main程序所在路径),go build main.go则会在项目根目录生成相应的执行文件,执行文件名称为根目录的文件名。将生成的执行文件和程序一些其他的文件(主要是一些和程序相关的配置文件等静态文件)上传到linux服务器,例如使用beego框架,除了上传执行文件外还需要将views,static,conf等3个文件夹上传到服务器。

特别强调一下,每次重新部署服务时,一定要记得同步更新配置文件!!!

4.进入linux系统下刚刚上传文件的目录,使用权限命令

chmod 777 程序名称


然后使用使程序在后台运行的命令

nohup ./程序名 &


如果要关闭程序,可以使用命令”ps” 查看后台程序的pid,然后使用“kill 程序pid”命令,关闭程序比如程序名为test,可以用如下命令查询

ps aux|grep test


也可以通过top -u username查看当前用户下所有进程,找到test的pid然后使用“kill 程序pid”命令,关闭程序比如程序名为test

需要在前台运行,直接

./程序名


前台进程的挂起:

ctrl+Z    //进程的终止


后台进程的终止:

方法一: 通过jobs命令查看job号(假设为num),然后执行kill %num

方法二: 通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

前台进程的终止:

ctrl+c


在Linux服务器上部署服务其他一些可能用到的命令有:

& 这个用在一个命令的最后,可以把这个命令放到后台执行

ps 列出系统中正在运行的进程

kill 发送信号给一个或多个进程(经常用来杀死一个进程)

jobs    查看当前有多少在后台运行的命令

fg    将后台中的命令调至前台继续运行

如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

bg      将一个在后台暂停的命令,变成继续执行

如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)


如有不对欢迎指正,相互学习,共同进步。

————————————————

版权声明:本文为CSDN博主「wade3015」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wade3015/article/details/83387212


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:core1988

查看原文:golang编译程序在linux上的部署

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1582 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传