docker 定时重启脚本_使用 Go 添加启动脚本

64a65777b92ad1ddd14d942ffd4e0ec8.png
  • 简介
  • 实践
  • 困惑
  • 总结
  • 当前部分的代码

简介

虽然 Makefile 能很好的整合各种命令, 是一个非常方便的工具. 但启动脚本也是必不可少的, Makefile 更多用于开发阶段, 比如编译, 单元测试等流程.

启动脚本的作用是控制程序的状态, 管理程序的启动, 停止, 查询运行状态等.

实践

直接上脚本了:

#!/bin/bashSERVER="web"
BASE_DIR=$PWD
INTERVAL=2# 命令行参数,需要手动指定, 这是在 docker 容器中运行的参数
ARGS="-c $BASE_DIR/conf/config_docker.yaml"function start()
{if [ "`pgrep $SERVER -u $UID`" != "" ];thenecho "$SERVER already running"exit 1finohup $BASE_DIR/$SERVER $ARGS >/dev/null 2>&1 &echo "sleeping..." &&  sleep $INTERVAL# check statusif [ "`pgrep $SERVER -u $UID`" == "" ];thenecho "$SERVER start failed"exit 1elseecho "start success"fi
}function status()
{if [ "`pgrep $SERVER -u $UID`" != "" ];thenecho $SERVER is runningelseecho $SERVER is not runningfi
}function stop()
{if [ "`pgrep $SERVER -u $UID`" != "" ];thenkill `pgrep $SERVER -u $UID`fiecho "sleeping..." &&  sleep $INTERVALif [ "`pgrep $SERVER -u $UID`" != "" ];thenecho "$SERVER stop failed"exit 1elseecho "stop success"fi
}function version()
{$BASE_DIR/$SERVER $ARGS version
}case "$1" in'start')start;;'stop')stop;;'status')status;;'restart')stop && start;;'version')version;;*)echo "usage: $0 {start|stop|restart|status|version}"exit 1;;
esac

用法如下:

  • ./admin.sh start 启动
  • ./admin.sh stop 停止
  • ./admin.sh restart 重启
  • ./admin.sh status 查看状态
  • ./admin.sh version 查看版本

困惑

在运行启动脚本的过程中遇到了一个问题, 就是使用脚本 stop 进程的时候, 进程会变成僵尸进程(Zombies), 而不是正常停止.

但如果不使用 nohup, 直接在前台运行, 然后在另一个终端中关闭, 是会关闭的.

这个问题困扰了我很久, 直到看到 stackoverflow 上的 类似问题.

这是在评论中发现的, 有时候豁然开朗就在一瞬间,

If you're running the process (even if you've called wait finally) inside the docker container with pid:1, it will also lead to a zombie. http://github.com/krallin/tiniwill be helpful in this case. – McKelvin Mar 8 '17 at 11:34

只要在 docker-compose 中设置 init 为 true 就行了, 类似这样:

version: "3.7"
services:web:image: alpine:latestinit: true

这会在 docker 容器内运行一个 init 来转发信号, 默认的 init 程序就是上面提到的 Tini.

这是在使用 容器开发 时遇到的问题.

总结

启动脚本是一个非常方便的工具, 用于管理进程的启动和停止.

当前部分的代码

作为版本 v0.13.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么我的U盘空间变小了:图解 FAT 文件系统基础知识

作者 | 鱼鹰Osprey转自 | 鱼鹰谈单片机FAT 文件系统是什么,当你格式化 U 盘之后 U 盘发生了什么,为什么删除的文件还可以再恢复?买的 U 盘明明写着 16 G,实际却只有15 G,这里隐藏了什么事实?FAT 文件系统随…

如何DIY一款属于自己的HID键盘?

这是一个自定义游戏键盘,带有四个热插拔机械键和可自定义的RGB LED。它由STM32F103Cx微控制器供电,并通过Arduino IDE进行编程。文章末尾分享该项目资料。功能概述:快速STM32F103Cx微控制器可实现低输入延迟。USB全速,轮询速率为1…

arm9重启ssh服务_部署ssh使用rsa登录配置

什么是ssh?ssh专为远程登录会话和其他网络服务提供安全性的协议,利用ssh协议可以有效的防止远程管理过程中的信息泄露问题。使用ras公钥登录linux操作环境本地服务器:win10 远程服务器:centos 8 git环境生成rsa文件在windows机器上&#xff…

Android MVP模式简单易懂的介绍方式 (一)

Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式。看了很多文章,基本上都是长篇大论,一堆理论。但这里,我们不从理论出发&#xff0c…

什么?TTL信号也能高速稳定传输100m+?是的,你没有听错,量产电路推荐!

作者:周工,排版:晓宇微信公众号:芯片之家(ID:chiphome-dy)TTL传输100米,是不是很惊讶?早就看透了你的心思。传输100米,干嘛不用差分信号?就知道你…

the params of sys aud mod req msgs from TV

sys aud mode req msg sent from TV to AMP has a param of PA of src dev, while sys aud mode req msg sent from TV to AMP hasnt any param: aud sys mod request from TV: sys aud mod req(off) from TV: 转载于:https://www.cnblogs.com/aspirs/p/9708831.html

一定要坚强

想写这篇文章的时候,是因为确实知道发生了一些事情。我应该没有跟大家说过一件事情,我在TCL的时候,因为一件很不爽的事情,跟同事差点打架了,起因是因为睡觉的时候,他一直在打呼噜,然后我晚上我根…

致驱动工程师的一封信

引言 作为一个算是合格的驱动工程师,总是有很多话想说。代码看的多了总是有些小感悟。可能是吧。那就总结一下自己看的代码的一些感悟和技巧。如何利用你看的这些代码?如何体现在工作的调试中。作为驱动工程师,主要的工作就是移植各种驱动&am…

我的博客搭建(3)

hexo生成工程文件介绍 hexo插件 主题yilia 默认目录结构 具体参考 |--.deploy |--public |--scaffolds |--source |--themes |--_config.yml |--package.json .deploy :部署到GitHub上的内容目录public:输出的静态网页内容目录scaffolds:layo…

Oracle 10.2.0.4和10.2.0.5 中 OEM bug 8350262

一. Bug 问题表现 2011年安装Oracle 10.2.0.4 和10.2.0.5 版本时,在配置OEM的时候会报错。 忽略这个错误后,DB 可以成功创建或者升级。 MOS 上关于这个bug的说明,参考:[ID 1222603.1] 该bug 的表现为DBCA和DBUA 配置失败&#xff…

C语言不调用库函数画直线

昨天写了一个代码,使用C语言画三角形,既然写了那个,那就继续画一条直线,这个也很有意思。C语言不调用库函数画一个三角形直线的方程是如下图所示— — 斜率的范围(-∞,∞)既然知道公式了,我们就直接上代码吧&#xff0…

Shell教程

shell编程 shell历史执行脚本基本语法 变量文件名代换Globbing命令代换算术代换转义字符单引号双引号Shell脚本语法 条件测试条件分支 ifthenelifelseficaseesac循环 fordodonewhiledodonebreak和continue位置参数和特殊变量输入输出 echo管道tee文件重定向函数Shell脚本调试方…

尘埃落定,初心未改——一个大学生的电子大赛感悟

大家好,我是写代码的篮球球痴这篇文章是一位参加电子竞赛的总结文章,分享给大家。也欢迎更多的读者给我投稿,采纳后会有礼物赠送。01.一腔热血定乾坤2020年,怀着一腔热血踏入大学。比起高中那个被学业充斥的时代,迈入大…

ik分词和jieba分词哪个好_Python 中文 文本分析 实战:jieba分词+自定义词典补充+停用词词库补充+词频统计...

最近项目需要,实现文本的词频分析,折腾了几天才完成任务,有点成就感,最后整理总结一下这部分的内容,希望更多同僚受益。一.使用前准备环境:Python3.6安装结巴:pip install jiaba下载…

基于智能手机Android平台音乐播放器全程开发实战

基于android开发的智能手机平台的应用越来越多,目前也是一块比较热门的技术,本项目为基于android系统的音乐播放器项目,学习本项目的目的是为了让学员尽快掌握android领域的小应用的开发.项目从需求分析起步,完善了音乐播放器的所有功能,课程讲解深刻。 项目描述: 1、支持音乐在…

RAC集群故障恢复CRS-4047,CRS-4000

知识点: RAC是real application clusters的缩写,译为“实时应用集群”,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。 主要作用: (1)多节点负载均衡; (2)提供高可用:故障容错和无缝切换功…

急用物料怎么办???

咱们硬件工程师,一般都属于研发部。既然是研发,那么就具有一点研究的性质,有可能遇到预想不到的问题,在解决这些问题的过程中,难免会突然要用到一些器件。这时问题就来了,公司没有这个器件啊,但…

python 分位数计算代码_Python数据分析第十一节 数据运算

数据运算不仅仅是加减乘除的基本运算,还要包括数据的比较,汇总和相关性的计算等等,这一节我们将计算的问题帮大家汇总出来~目录一. 加减乘除运算二. 比较运算三. 汇总运算count 非空值计数sum 求和其他(均值,最大最小值…

自己动手写一个 strace

这次主要分享一下一个动手的东西,就是自己动手写一个 strace 工具。用过 strace 的同学都知道,strace 是用来跟踪进程调用的 系统调用,还可以统计进程对 系统调用 的统计等。strace 的使用方式有两种,如下:strace 执行…

在Asp.net网页中使用接口

在开发Asp.net时,我们会经常有应用MasterPage或是WebUserControl。这样会遇上一个问题,需要在aspx去找MasterPage或是WebUserControl内的对象,或是从aspx传值给它们。比如一个WebUserControl被aspx调用之后,它产生的ID会随着aspx的…