go语言创建守护进程 golang创建守护进程

如何运行一个golang程序为守护进程您好go语言创建守护进程,很高兴为您解答 。
安装daemonize
安装git环境
yum install git -y
获取daemonize
git clone git://github.com/bmc/daemonize.git
安装daemonize
cd daemonize
./configure
makemake install
查看是否安装
daemonize -v
通过daemonize执行golang守护进程
需要打包golang程序为可执行文件(go build),并通过daemonize来执行它来实现守护进程,如go语言创建守护进程:
daemonize -p /var/run/myapp.pid -l /var/lock/subsys/myapp -u nobody /path/to/myapp
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望go语言创建守护进程我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
Supervisor与Logrotate在golang的gin项目中使用supervisor守护进程,用子进程配置将标准输出日志转移到指定目录下,然后使用阿里云的日志服务将标准输出日志转移到线上做一些分析和预警 。
项目上线之后一切正常,可是周日夜里三点左右阿里云的日志服务采集不到日志 , 一顿pv为0的告警过来,赶紧打开电脑,线上服务正常,松一口气,supervisor状态也正常,观察了一会业务数据正常就安然入睡了,心想可能是因为配置项有缺陷吧 , 回头好好整整supervisor的配置再观察一波 。
早上起来打开服务器,cd /var/log/supervisor/,发现存在两个日志文件 , 分别是xxxx.log-20201223和xxxx.log,xxxx.log的大小为0,xxxx.log-20201223还在继续写入请求日志,权限问题?chmod 777之后发现新的文件还是不写入日志 , 重启 supervisor之后发现日志能正常写入了 。。。一开始怀疑是supervisor日志切割备份有问题,将配置stdout日志文件大小的stdout_logfile_maxbytes配置项,默认 50MB改成0 , 代表无限大,stdout日志文件备份数的stdout_logfile_backups配置项,默认10改为0 , 代表不备份 , 重启supervisor,心想不切割总不会再出现切割之后不往新文件写内容的问题了,真乃明智之选 。:)
一周过去,0pv的告警如期而至 , 虽然不影响线上业务,如鲠在喉让我久久不能释怀 。全网翻,百度谷歌,中文英文,去github上翻issue等等,看到一个历史issue1090,Better support for logrotate,感觉和日志转储相关,于是查了下logrotate相关资料,logrotate程序是一个日志文件管理工具 。用于分割日志文件,删除旧的日志文件,并创建新的日志文件 , 起到“转储”作用 。centos系统默认安装,于是找到对应的配置文件,果不其然里面就有supervisor,默认配置如下:
/var/log/supervisor/*.log {
missingok
weekly
notifempty
nocompress
},看到weekly感觉离这个问题的答案不远了,于是去查找linux的logrotate往旧文件写入的问题 , 在一篇logrotate writing to old app.log.1 instead of app.log的文章中找到需要配置参数copytruncate,是用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差 , 可能会丢失部分日志数据 。增加完配置之后,为了快速验证结果,修改weekly为daily , 第二天日志正常切割了 , 新的文件也正常写入了标准日志 。至此问题解决 。
linux的logrotate对于运维来说可能是常识,作为开发刚接触运维 , 只能慢慢积累了,工作之余看看相关的运维知识,尽量少采坑 。
如何使用Go语言是操作DockerDocker 提供了一个与 Docker 守护进程交互的 API (称为Docker Engine API) , 我们可以使用官方提供的 Go 语言的 SDK 进行构建和扩展 Docker 应用程序和解决方案 。

推荐阅读