场景描述
有一个跑的时间非常长的任务,大概需要连续跑20h,这个任务是一次性的,不值得去配置什么CICD
思路
golang手熟所以使用golang去完成了,曾经思考是不是用其他脚本语言会更好?
但是对于这种一次性的需求,显然哪个语言熟练度高就用哪个语言了。
最好的方式应该是使用交叉编译,打包一个可执行文件,扔到服务器上去运行即可。
或者也可以在一个有运行环境的服务器上。
最后手头有一个没有golang环境,但是有docker环境的,不清楚linux版本的测试机器。决定使用docker的方式来运行这个脚本。
配置
- 任何ssh工具(我是用mobaXterm)
- 一台具有docker环境的机器
具体过程
登录到运行机器上,先通过ssh工具把代码传到机器上。
然后cd到代码所在的文件夹,直接运行以下语句:
1 | docker run -it --rm -v $(pwd):/app -w /app golang:1.20 bash |
你将获得一个一次性的,以当前目录挂载到app文件夹下的golang容器,需要注意的是,因为用了rm的选项,一旦退出当前ssh会话,容器就被销毁了。
如果需要一个真正的,后台一直运行的任务,需要用如下命令
1 | docker run -d --rm -v $(pwd):/app -w /app golang:1.20 bash -c 'while true; do echo "The script is running at: $(date)"; sleep 1; done' |
其中单引号里的语句替换成真正的生产实际语句。
golang的google源没办法使用,记得先换成使用命令换成国内源
1 | export GOPROXY=https://goproxy.cn,direct |
最后的命令应该组成类似于
1 | docker run -d --rm -v $(pwd):/app -w /app golang:1.20 bash -c 'export GOPROXY=https://goproxy.cn,direct;go run main.go' |
附上一段我自己用的main.go测试文件
1 | package main |