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,一经查实,立即删除!

相关文章

SpringBoot在自定义类中调用service层等Spring其他层

解决方案: 1.上代码Component public class ServerHandler extends IoHandlerAdapter {Autowiredprotected HealthDataService healthDataService;private static ServerHandler serverHandler ;PostConstruct //通过PostConstruct实现初始化bean之前进行的操作pu…

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

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

持续集成(CI)- 各种工具的资料总结

为了实施CI,必须使用工作的支持,以使整个过程的自动化进行,以下把该过程涉及的各种工具汇集一下 必须的工具和功能 源代码控制系统 微软的工具: Microsoft Team Foundation Server (TFS) 或VSS 开源工具: 服务端: Subversion&…

如何用python制作动画的软件_大牛Python程序员制作3D动态可视化教程

Bar3D(3D 柱状图)name -> str图例名称x_axis -> strx 坐标轴数据。需为类目轴,也就是不能是数值。y_axis -> stry 坐标轴数据。需为类目轴,也就是不能是数值。data -> [list], 包含列表的列表数据项,数据中,每一行是一…

Python开课复习10

# 储备知识:# 函数的使用应该分为两个明确的阶段# 1. 定义阶段:只检测语法,不执行函数体代码def func(): print(from func)# 2. 调用阶段:会触发函数体代码的执行# func()#先定义后调用# 示范一# def foo():# print(from foo)# bar()# foo()# # 示范二:# def bar():…

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

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

给要学习.NET(c#语言)的新手一些学习方法

推荐两本书 第一本是《21天学通c#语言》 可能这本书的出版时间有点早,一些新的技术没涉及到,但是作为基础这本书是很不错的。 【原 书 名】 Sams Teach Yourself C# in 21 Days 【原出版社】 Sams 【作 者】(美)Bradley L.Jones…

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米,干嘛不用差分信号?就知道你…

学习:java设计模式—工厂模式

一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类:1)简单工厂模式(Simple Factory):不利于产生系…

python pexpect pxssh scp_Python 的 pexpect 使用 scp 把文本文件传一半就不传了,怎么办?...

ps1aniuge2018-10-09 15:10:51 08:00linux 版 powershell,管理员权限运行 Install-Module winscp 即可。[测试通过的脚本例子]#----------------------------#用户输入部分$本地文件_路径 d:\$本地文件_文件名 a1.txt$本地文件_绝对路径名 join-path -Path $本地…

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的时候,因为一件很不爽的事情,跟同事差点打架了,起因是因为睡觉的时候,他一直在打呼噜,然后我晚上我根…

读c语言深度剖析 -- 单引号与双引号、逻辑运算符、位运算符、花括号

单引号与双引号我们知道双引号引起来的都是字符串常量,单引号引起来的都是字符常量。比如:‘a’和“a”完全不一样,在内存里前者占1个byte,后者占2个byte。1,‘1‘,“1”。第一个是常数,32位系统…

致驱动工程师的一封信

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

我的博客搭建(3)

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

alios是安卓吗_【讨论】YUNOS到底是不是Android?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼最近听朋友说,阿里巴巴集团,自己成功研发了一个系统,并且世界装机占有量排名第三,我当时很震惊,这么大的新闻,作为一个从业者我竟然不知道,然后我就…

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…