ubuntu14.04 系统,直接通过apt-get安装即可

apt-get install supervisord

官网:http://www.supervisord.org/

主配置文件

这个配置在/etc/supervisor/supervisord.conf

配置内容如下:

root@xxx:/etc/supervisor/conf.d# grep -vE "(^;|^$)" /etc/supervisor/supervisord.conf
[unix_http_server]
file=/var/log/supervisord/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/var/log/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/log/supervisord/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/log/supervisord/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf

应用配置文件

这个配置在/etc/supervisor/conf.d

root@xxx:/etc/supervisor/conf.d# cat C9019_app.conf
[program:C9019_app] # 这段要注意,改成你自己的
command=/opt/C9019/webapps/start.sh start # 启动脚本,有什么参数都给添加上,这个脚本是自己写的
directory=/opt/C9019/webapps # 在哪个目录下启动程序
autostart=true
exitcodes=0
autorestart=true
startretries=3
exitcodes=0,2
#stopsignal=TERM
#stopasgroup=true
stopwaitsecs=2
user=root
export JAVA_HOME=/opt/jdk1.8.0_121
export JRE_HOME=/opt/jdk1.8.0_121/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
stdout_logfile=/var/log/supervisord/C9019_app_stdout.log
stderr_logfile=/var/log/supervisord/C9019_app_stderr.log

其他的参数请参考官网吧

启动

supervisord -c /etc/supervisor/supervisord.conf

自定义启动脚本如何加入到supervisord进行管理

首先我们看下自定义脚本内容:

#!/bin/bash
'''省略N行
function start(){
c="`ps -ef |grep config.type| grep -c ${MAIN_CLASS}`" if [ $c -le 1 ]; then
echo "starting ${COMPONENT_NAME}..."
java xxx(省略N多内容) >$LOGDIR/error.log 2>&1 >$LOGDIR/error.log & # 注意看这个&号
echo $! > $LOGDIR/pid.log
echo "started ${COMPONENT_NAME} pid:$!"
else
echo "already started ${COMPONENT_NAME} pid:`cat $LOGDIR/pid.log`"
fi
}
function stop(){
echo "stoping ${COMPONENT_NAME}..."
for pid in $(ps aux|grep java|grep config.type| grep ${MAIN_CLASS}|awk '{print $2}')
do
echo "kill -9 ${pid}"
kill -9 ${pid}
done
echo "stopped ${COMPONENT_NAME}"
}
function restart(){
stop
sleep 10
start
} case "${COMMAND}" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "require:start|stop|restart"
esac
exit 0

我之前自定义脚本在启动程序的时候是用了 & 让 程序后台运行的,这样就导致supervisord 无法掌控程序了,所以需要把& 给删除。

在有&符合启动的时候,产生如下错误,解决办法就是 java xxx(省略N多内容) >$LOGDIR/error.log 2>&1 >$LOGDIR/error.log & 最后一个&删掉,这样保持前台运行,supervisor就能掌控这个程序了。

root@xxx:/etc/supervisor/conf.d# supervisorctl
C9019_app FATAL Exited too quickly (process log may have details)
supervisor> restart C9019_app
C9019_app: ERROR (not running)
C9019_app: ERROR (abnormal termination

在去掉&以后,完美管控程序

root@xxx:/opt/C9019/webapps# supervisorctl
C9019_app RUNNING pid 14464, uptime 0:25:53
supervisor> status
C9019_app RUNNING pid 14464, uptime 0:25:54
supervisor> restart C9019_app
C9019_app: stopped
C9019_app: started

问题总结

无法管理程序

程序放入后台导致supervisor无法管理了,此时放入前台运行即可。

自定义程序启动脚本加入到supervisord下管理的更多相关文章

  1. 不错的linux下通用的java程序启动脚本

    不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...

  2. Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)

    本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...

  3. 开发nginx启动脚本及开机自启管理(case)

    往往我们在工作中需要自行写一些脚本来管理服务,一旦服务异常或宕机等问题,脚本无法自行管理,当然我们可以写定时任务或将需要管理的脚本加入自启等方法来避免这种尴尬的事情,case适用与写启动脚本,下面给大 ...

  4. 不错的linux下通用的java程序启动脚本(转载)

    转自:http://www.cnblogs.com/langtianya/p/4164151.html 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包 ...

  5. 【转】不错的linux下通用的java程序启动脚本

    虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...

  6. java程序启动脚本

    #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] then echo "Please check that this script ...

  7. Ubuntu 18.04 设置开机启动脚本 rc.local systemd

    ubuntu18.04不再使用initd管理系统,改用systemd. ubuntu-18.04不能像ubuntu14一样通过编辑rc.local来设置开机启动脚本,通过下列简单设置后,可以使rc.l ...

  8. Linux_自制系统服务启动脚本

    目录 目录 前言 Case语句 Apache 启动脚本 Postfix service 启停脚本 前言 在Linux的某些系统服务中,需要自己定制启动服务的脚本.通常会使用Cash语句来实现. Cas ...

  9. Linux开机自启应用&开机执行脚本&监听端口应用挂掉了执行启动脚本

    linux开机自启 背景 目前要部署一个spring boot框架的jar包,实现开机启动项目或者应用挂掉了 执行启动脚本 在root目录下有一个启动项目的脚本: app_start.sh app_s ...

随机推荐

  1. Distance(2019年牛客多校第八场D题+CDQ+树状数组)

    题目链接 传送门 思路 这个题在\(BZOJ\)上有个二维平面的版本(\(BZOJ2716\)天使玩偶),不过是权限题因此就不附带链接了,我也只是在算法进阶指南上看到过,那个题的写法是\(CDQ\), ...

  2. M × N Puzzle

    http://poj.org/problem?id=2893 来自逆序对的强大力量 #include<iostream> #include<stdio.h> #include& ...

  3. 201671030107 胡文艳 实验十四 团队项目评审&课程项目总结

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 1.掌握软件项目评审会议流程 ...

  4. DT添加七牛云对象存储插件功能

    七牛云对象存储  1.注意客户购买的空间的存储区域,区域不同对应的上传域名不同    destoon  七牛云上传文件   用下面源码替换include/ftp.class.php   文件代码 &l ...

  5. 32、MySQL简介

    一.MySQL简介 1.数据库管理软件分类 主要分为关系型和非关系型. 可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构. 关系型:如sqllite,d ...

  6. jasypt-spring-boot

    运行 运行时配置解密秘钥-Djasypt.encryptor.password=在idea中运行 命令行启动和docker中运行参见https://www.cnblogs.com/zz0412/p/j ...

  7. hadoop spark合并小文件

      一.输入文件类型设置为 CombineTextInputFormat hadoop job.setInputFormatClass(CombineTextInputFormat.class) sp ...

  8. python函数 | 列表生成式

    在编写程序或者查看别人的程序时,经常会遇到列表生成式,这个使用起来并不复杂,但是非常有用,使我们的代码更加简洁灵活.很多python使用者并不太会使用它.今天,就给大家详细讲解列表生成式和生成器表达式 ...

  9. linux查看反汇编

    生成反汇编文件 gcc xxx.c -g -o a.out objdump a.out -dSsx > file 调试的时候查看反汇编: gdb a.out ...layout asm 参考博文 ...

  10. haproxy 2.0 dataplaneapi 类似的工具haproxyadmin

    haproxyadmin 是一个python 的pip 包,提供了类似dataplaneapi 的功能,使用上也比较简单,同时提供的方法也比较全 使用的技术与dataplaneapi 基本类似,也是一 ...