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系统后台运行应用三板斧相关推荐

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

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

  2. redis设置后台启动,关闭后台redis

    1:设置后台启动 1:拷贝解压目录下的redis.conf配置文件到安装目录的bin目录下> cp redis.conf /usr/local/redis/bin/ 2:修改安装路径下的redi ...

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

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

  4. 后台启动elastisearch-head,避免后台启动es head在关闭shell后es head自动关闭,网上一大堆错误的,这个是正解,来自互联网

    后台启动elastisearch-head命令:grunt server & ps:正解,不是grunt server &exit,而是先执行grunt server &,然后 ...

  5. linux 单步启动_Linux系统的启动

    一.启动步骤和GRUB 1.Linux启动过程分析 (1)BIOS自检 l硬件检测及初始化 l引导启动设备 (2)引导启动设备 l软盘(0磁道第一个扇区) l光盘(最外围存储轨道) l硬盘(MBR) ...

  6. Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解

    Spring Boot项目三种启动方式及后台运行详解 1 Spring Boot项目三种启动方法 运行Application.java类中的Main方法 项目管理工具启动 Maven项目:mvn sp ...

  7. 后台启动_Windows10中如何阻止程序在后台运行

    Windows用的越久速度越慢有多种原因,其中一个原因是安装了很多开机启动并驻留在内存中的程序.用户可以通过禁用这些后台程序来改善计算机运行的速度.有很多方法可以做到这一点,最简单的就是下载一个第三方 ...

  8. Android 系统(215)---Android O_GO后台启动服务改动

    Android O_GO后台启动服务改动 Android O_GO后台启动服务改动 1. 问题现象 应用在适配Android O/GO的系统时,会发现后台启动不了服务,会报出如下异常,并强退: jav ...

  9. 项目如何在Linux系统后台运行以及调回前台运行

    第一类:nodejs服务 使用forever 工具管理nodejs服务在后台运行:需要先安装forever工具 sudo npm install forever -g 1.启动(在后台运行) fore ...

最新文章

  1. Visual studio 2010出现“error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”解决方式...
  2. springBoot 打war包 程序包com.sun.istack.internal不存在的问题
  3. Struts2利用iText导出word文档(包含表格)
  4. python No tests were found问题解决方法
  5. golang中map并发读写问题及解决方法
  6. dotween曲线运动 unity_Unity中DOTween插件的DOTweenPath轨迹移动
  7. 软考-信息系统项目管理师-信息系统综合测试与管理
  8. dubbo知识点总结 持续更新
  9. java if emun_关于java:Enum与If-else
  10. IPC--进程间通信七 (socket)
  11. 只需 45 秒,Python 给故宫画一组手绘图!
  12. Python成长笔记 - 基础篇 (七)python面向对象
  13. TortoiseGit--小乌龟git项目中的使用简介
  14. 【modelarts】华为人工智能平台_modelarts平台系列教程1
  15. UG软件制图的几个重要技巧,你知道吗?
  16. gentoo 修改键盘映射
  17. ApacheCN 翻译活动进度公告 2019.6.15
  18. 编译java源文件(在cmd下编译)傻瓜式教学
  19. Dubbo概述及架构图
  20. Excel遇到错误div/0显示为0或者不显示

热门文章

  1. mysql迁移到mariadb_项目从MYSQL迁移至MARIADB教程
  2. 2021年数据科学家面试:4个基本SQL窗口函数介绍以及示例
  3. 如何从零学习PostgreSQL Page结构
  4. 记一次MongoDB故障排查的过程
  5. 数据科学:Oracle 并购 DataScience 公司提升机器学习能力
  6. ACE总监侯圣文全面解析特训方法
  7. 华为云基于云原生媒体网络,又出重磅新品
  8. 分盘存储:实现数据库备集群备份文件分散存储
  9. Activity的属性taskAffinity
  10. WordPress无其他语言解决方法