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

简介

虽然 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

docker 定时重启脚本_使用 Go 添加启动脚本相关推荐

  1. java bat 启动脚本_解析Tomcat的启动脚本--catalina.bat

    概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...

  2. 计算机组策略定时开机脚本,使用组策略计算机启动脚本部署 Office 2013

    使用组策略计算机启动脚本部署 Office 2013 12/22/2017 本文内容 适用于: Office 2013, Office 365 ProPlus 上一次修改主题: 2016-12-16 ...

  3. 定时重启软件_办公电脑怎样设置定时重启?依靠这款工具即可轻松实现

    在平时的工作办公过程当中,电脑是我们进行工作展开的标配,很多事情都需要通过电脑来进行完成,而像平板或手机,可能无法实现电脑上的一些功能,哪怕是最基本的功能,所以电脑是工作过程中的重要工具. 而我们平时 ...

  4. 宝塔linux shell定时访问url,bt(宝塔)面板添加shell 脚本通过nginx日志封访问频率过高的IP...

    额,这篇文章是bt(宝塔)面板来写的文章,其他的程序如果是wdcp管理面板也有添加shell脚本的功能,大鸟自己用的是bt(宝塔)面板,所以说说如何添加shell 脚本通过nginx日志封访问频率过高 ...

  5. 下怎么运行sh脚本_基于CentOS7系统添加自定义脚本服务及参数说明,附实例

    概述 centos6如果要添加自定义脚本服务只需要把脚本放到/etc/init.d然后授权后用chkconfig添加后就可以管理了,那么centos7又是怎么添加自定义脚本服务呢? CentOS7添加 ...

  6. jmeter脚本_性能工具之Jmeter脚本python启动

    背景 上一节是shell命令启动Jmeter,担心大家对shell脚本语法不是很熟悉,如果定制自己想要的恐怕不好弄,这次改用python启动脚本,在改造之前大家先了解下Jmeter线程组相关参数,这样 ...

  7. 谷歌浏览器如何启用java小脚本_各种浏览器开启JavaScript脚本方法

    随着网站设计技术的发展,为了用户友好体验,大部分网站使用了JavaScript脚本设计,如果您的浏览器禁用或关闭的JavaScript支持,那么可能造成网站体验差或网站部分功能无法使用 下面提供10种 ...

  8. java执行python脚本_通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

  9. ubuntu 设置开机执行脚本_ubuntu-18.04 设置开机启动脚本

    ubuntu-18.04 设置开机启动脚本 参阅下列链接 ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.local重新发 ...

最新文章

  1. Scrapy框架模拟Github网站登陆
  2. Keil 函数内联 inline
  3. 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  4. uniapp h5页面 在移动端 使用clipboardone.js插件实现 写入剪切板 -- 安卓和ios安美适配(仅测试部分机型)
  5. 计算机系统基础:输入输出技术知识笔记
  6. conversion to dalvik format failed with error 1的解决办法
  7. 无锁atomicInteger
  8. mysql数据库密码有效期_Mysql5.7.19密码已过有效期的处理过程(密码过期password_expired)...
  9. jpushinterface.setalias的几个参数都是啥意思_很多电工老师傅都不知道,低压断路器基本参数,你懂几个?...
  10. IntelliJ IDEA快速自动生成Junit测试类
  11. java获取网页的内容_java获取网页内容
  12. RuntimeError: context has already been set(multiprocessing)
  13. 人脸检测于仕琪--libfacedetection
  14. 腾讯云数据库 TDSQL—— 私有云安装部署手册
  15. 昆仑通态触摸屏用串口与西门子200通讯,用网口做数据中转,把PLC数据转发给其他modbusTCP客户端
  16. Visual Studio2019安装vsix扩展文件
  17. CPU性能排行与评分
  18. 哪吒之魔童降世视听语言影评_《哪吒之魔童降世》观后感精彩影评5篇450字
  19. 解读加多宝的营销案例分析 1
  20. 互动媒体技术——对十二个“一”的文艺创作作业进行文本分析、统计和可视化

热门文章

  1. EasyUI学习总结(二)——easyloader分析与使用
  2. 《星辰傀儡线》人物续:“灭世者”、“疯狂者”、“叛逆者”三兄妹
  3. 千位分隔符转换为数字
  4. 单循环链表中设置尾指针比设置头指针更好的原因
  5. 学成在线--11.RabbitMQ快速入门
  6. cifs mount 挂载共享目录_安装cifsutils解决linux挂载windows共享文件夹
  7. 清华大学《操作系统》(八):置换算法
  8. viewsource和viewparsed_Network Panel说明
  9. dataframe 控对象_iOS知识 - 常用小技巧大杂烩
  10. C++语言中multiset的相关用法及扩展