Linux系统中我们经常需要将应用或程序放在后台运行,下面从应用角度介绍下后台运行的三板斧supervisor、screen、nohup。

supervisor

为什么要先介绍supervisor呢?

因为supervisor可以对所管理的进程启动、重载、停止,当监测到进程停止后,会自动拉起,实现了进程的“故障自愈”。我们不需要再额外开发守护脚本,导致维护成本的增加。

对于运维这简直是神器,必须放在第一位,但是需要花点配置成本。下面就来看下supervisor如何使用。

1.安装

#centos7yum install supervisorvim /etc/supervisord.conf#最后两行可看到,最终配置文件在 supervisord.d/目录下[include]files = supervisord.d/*.ini#开机自启动systemctl enable supervisord#查看是否开机自启动systemctl is-enabled supervisord

2.配置

  1. cd /etc/supervisord vim hello.ini #程序名hello [program:hello] ;启动用户 user=root ;程序启动命令 command=java -Dspring.profiles.active=test -jar hello.jar numprocs=1 ;程序启动目录 directory=/opt/java_app ;在supervisord启动时自启动 autostart=true ;程序异常退出后自动重启,可选值:[unexpected,true,false],默认为unexpected autorestart=true ;启动10秒后没有异常退出,就表示进程正常启动了 startsecs=10 ;启动失败自动重试次数 startretries=3

3.管理

#参数可以为all或单个项目hellosupervisorctl reload [all | hello]#更新配置文件,更新配置文件并重启与更新有关的进程supervisorctl update hello#重载配置文件 ,注意reload会导致supervisor重启,所管理的进程会重启supervisorctl reload hello#查看状态supervisorctl status#启动hellosupervisorctl start hello

4.应用场景

supervisor适用于可多次启动并长期运行的后台任务,如java服务、缓存服务及其他自定义服务等。

5.小结

supervisor可以很优雅的解决掉关于进程的启动、重启、重载等方面的操作,而之前我们可能需要花更多的时间去额外处理,如判断进程存在、杀掉进程甚至可能还需要配合脚本写个循环去串联这些操作。

另supervisor还提供了很多第三方的Web-UI统一的 WebUI 集中化管理各个服务器节点的进程,如CeSi、supervisor-easy、Supervisord-monitor等,在此不多做描述。

注意:

  1. supervisor管理运行于前台的进程,对于运行后台daemon的进程,如tomcat、jetty、nginx等启动后会直接在后台运行,supervisorctl status会报错"BACKOFF Exited too quickly (process log may have details"。
  2. Centos6.5默认yum安装supervisor版本为2.1版本,此版本运行有问题,不建议使用。

screen

Screen的会话保持特性,即screen打开的会话可以分离或恢复,而不影响会话内部的操作,这样我们将命令行、脚本甚至是数据传输放到screen会话中运行,效果就类似于后台运行。

1.普通模式

[root@test #]$ yum install screen -y#创建会话hello,此时会登入新会话[root@test #]$ screen或[root@test #]$ screen -S hello#分离会话,此时程序不会中断键盘ctrl+a+d 分离会话[detached from 28877.hello]#列出所有会话[root@test #]$ screen -lsThere is a screen on:  28877.hello  (Detached)  28876.test   (Dead)1 Socket in /var/run/screen/S-root.#恢复会话[root@test #]$ screen -r 28877或[root@test #]$ screen -r hello#清除dead会话[root@test #]$ screen -wipe

2.分离模式

在分离模式下的屏幕会话,作为守护程序启动。

#创建一个后台运行任务[root@test #]$ vim test.sh#!/bin/bashn=0while [ $n -le 50 ]do     echo $n    n=$(( $n + 1 ))    sleep 1done#创建处于分离模式的会话,启动后直接断开会话[root@test #]$ screen -dmS test./test.sh#此时会话已断开,但是任务仍在运行,相当于把任务放在后台运行[root@test #]$ screen -lsThere is a screen on:  30537.test  (Detached)#登入会话脚本正在会话中打印输出,执行完毕后会会话终止[root@test #]$ screen -r 30537012

注意:

如果要打印screen日志,需如下设置:

#其中%t 为标题,如screen_test.logecho "logfile /root/screen_%t.log" >> /etc/screenrc#-L 打开日志输出#-t 为标题#执行命令后,会在/root下生成screen_test.logscreen -L -t test -dmS test ./test.sh

3.应用场景

screen适用于单次长时间运行的任务,如备份、ftp传输、下载、数据导入导出、终端超时断开等。

4.小结

screen的会话保持和日志输出,在一定程度上也可以作为后台运行的一种方式。但是需要多用户会话的管理,如test用户创建的会话,root通过screen -ls查看是看不到test用户新建的会话的。因此会话管理,一定需要头脑清醒。

nohup

nohup后台运行最常见的方式,拿来即用,没有什么配置成本,可直接上手。这个大家比较熟悉,就不作过多介绍。

#还是以上面的test.sh脚本为例[root@test #]$ vim test.sh#!/bin/bashn=0while [ $n -le 50 ]do     echo $n    n=$(( $n + 1 ))    sleep 1done#默认情况下nohup运行的程序,输出记录会打印到当前目录下的nohup.out文件中[root@test #]$ nohup bash test.sh &[1] 7415nohup: ignoring input and appending output to ‘nohup.out’[root@test #]$ tail -f nohup.out012[root@test #]$ jobs -l[1]+  7415 Running                 nohup bash test.sh 标准输出及错误输出,重定向到自定义日志[root@test #]$ nohup bash test.sh > test.log 2>&1 &[root@test #]$ tail -f test.lognohup: ignoring input01

总结

以上三种后台运行的方式,大家可各取所需,不必矫枉过正,毕竟我们首先要保证的是业务稳定运行。

linux 后台运行_Linux系统后台运行应用三板斧相关推荐

  1. 后台启动_Linux系统后台运行应用三板斧

    Linux系统中我们经常需要将应用或程序放在后台运行,下面从应用角度介绍下后台运行的三板斧supervisor.screen.nohup. supervisor 为什么要先介绍supervisor呢? ...

  2. 在每个运行中运行多个查询_linux系统中运行级别介绍

    CentOS7.3学习笔记总结(五十)- linux系统中运行级别介绍 linux系统中的运行级别是操作系统运行时的功能级别,级别从0到6共7个功能级别,分别是: 0:停机 1:单用户模式 2:多用户 ...

  3. linux 嵌入式 快照_Linux 系统之Systemd

    标签: 子贡问为仁.子曰:"工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者."--孔子(春秋)<论语·卫灵公> [工欲善其事,必先利其器] 掌握一门技术 ...

  4. linux常用指令_Linux系统常用指令总结

    来源 | CSDN 博客 作者 | 不撸代码闲得慌,责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 系统的运行级别 0:关机 1:单用户模式(可以找回丢失的密码) 2:多用 ...

  5. 只在用户登陆时运行_linux 系统的7个运行级别

    一.Linux的运行级别(runlevel) 二.运行级别的原理 1.在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service) 2.在/etc/rc.d下有7个名为 ...

  6. 使用UltraISO(软碟通)制作系统盘 / U盘启动-linux版、 双系统的运行

    制作系统盘的方法有很多,我习惯用软碟通-UltraISO制作方法: 软碟通又叫ULTRAISO,是一款可以制作和编辑镜像文件的软件,利用ULTRAISO你可以把硬盘的文件制作成异文件并可以刻录成光盘, ...

  7. Linux从安装完系统到运行springboot项目(ubuntu)

    个人笔记,仅供参考. 1.配置jdk (1)下载官方的jdk,我下载的是jdk1.8.0_161,官网Java Downloads | Oracle 进入官网后下拉到java8下载,将所需的jdk下载 ...

  8. vnc连接linux使用教程_linux系统下vnc 的配置和使用方法

    linux系统下vnc 的配置和使用方法 发布时间:2013-06-01 17:35:28   作者:佚名   我要评论 VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer):另 ...

  9. linux top交叉编译_Linux 系统下ARM Linux交叉编译环境crosstool工具

    Linux系统下ARM Linux交叉编译环境的建立目前流行的有三种途径. 一.使用别人编译好的开发工具链本文引用地址:http://www.eepw.com.cn/article/201611/31 ...

最新文章

  1. puppeteer爬虫的奇妙之旅
  2. 区块链还可以这么玩?“点亮莫高窟”背后的腾讯云区块链
  3. (JavaWeb)会话跟踪技术Cookie和Session(重点)
  4. Mysql 内部结构 / Replication | 层次结构
  5. string_view理解与用法(二)
  6. 设置访问权限_【新思考教学者思】李世松:不要对经典设置访问权限
  7. 远控免杀专题(19)-nps_payload免杀
  8. Python中查找包含它的列表元素的索引,index报错!!!
  9. poj3616 基础的动态规划算法 《挑战程序设计竞赛》
  10. object picker 微信小程序_第三天学习微信小程序开发总结
  11. sqlserver2008未将对象引用设置到对象的实例_JVM | Java对象的创建、存储和访问详解...
  12. orb-slam a versatile and accurate monocular slam system
  13. 深入理解Java中四种创建对象的方式
  14. 使用脚本下载.ts文件并合并
  15. SQL Server上月同期 日期的计算
  16. applet 打印的属性和配置
  17. Quick BI企业报表制作——个人笔记
  18. 微信支付商户接入(一)
  19. 广东2022年养老金计发基数为8682元,人们都能领这样多养老金吗
  20. libusb介绍及简单使用

热门文章

  1. function declaration isn't a prototype解决办法
  2. 软件接口测试一个项目的实战,全网最全postman接口测试教程和接口项目实战~从入门到精通!!!...
  3. 漫谈广告竞价模式(六)
  4. Go:创建新进程(os.StartProcess源码解读)
  5. Iptables(2) - iptables命令的基本用法
  6. 自动化测试学习之路--HTML常见元素、属性的简单学习
  7. 【二十一】插件开发——用于验证码识别的 JMeter 插件(上)
  8. cut out数据增强_被多种离散化场景困扰?8种python技巧!让数据处理更简单
  9. python打印文件到字符串_请问Python打印字符串到文本文件
  10. .net前台ajax,asp.net利用Ajax和Jquery在前台向后台传参数并返回值