当前位置: 首页 > news >正文

​linux启动进程的方式

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

linux启动进程的方式

最基础的 nohup 方式

这是最简单的方式,也是 linux 新手们很容易搞混淆的一个经典问题:

command
command > /dev/null
command > /dev/null 2>&1
command &
command > /dev/null &
command > /dev/null 2>&1 &
command &> /dev/null
nohup command &> /dev/null

请回答以上命令的异同……

具体不一一解释了。直接说答案,想要维持一个长期后台运行的 logstash,你需要同时在命令前面加nohup,后面加 &

更优雅的 SCREEN 方式

screen 算是 linux 运维一个中高级技巧。通过 screen 命令创建的环境下运行的终端命令,其父进程不是 sshd 登录会话,而是 screen 。这样就可以即避免用户退出进程消失的问题,又随时能重新接管回终端继续操作。

创建独立的 screen 命令如下:

screen -dmS elkscreen_1

接管连入创建的 elkscreen_1 命令如下:

screen -r elkscreen_1

然后你可以看到一个一模一样的终端,运行 logstash 之后,不要按 Ctrl+C,而是按 Ctrl+A+D 键,断开环境。想重新接管,依然 screen -r elkscreen_1 即可。

如果创建了多个 screen,查看列表命令如下:

screen -list

最推荐的 daemontools 方式

不管是 nohup 还是 screen,都不是可以很方便管理的方式,在运维管理一个 ELK 集群的时候,必须寻找一种尽可能简洁的办法。所以,对于需要长期后台运行的大量程序(注意大量,如果就一个进程,还是学习一下怎么写 init 脚本吧),推荐大家使用一款 daemontools 工具。

daemontools 是一个软件名称,不过配置略复杂。所以这里我其实是用其名称来指代整个同类产品,包括但不限于 python 实现的 supervisord,perl 实现的 ubic,ruby 实现的 god 等。

以 supervisord 为例,因为这个出来的比较早,可以直接通过 EPEL 仓库安装。

yum -y install supervisord --enablerepo=epel

在 /etc/supervisord.conf 配置文件里添加内容,定义你要启动的程序:

[program:elkpro_1]
environment=LS_HEAP_SIZE=5000m
directory=/opt/logstash
command=/opt/logstash/bin/logstash -f /etc/logstash/pro1.conf -w 10 -l /var/log/logstash/pro1.log
[program:elkpro_2]
environment=LS_HEAP_SIZE=5000m
directory=/opt/logstash
command=/opt/logstash/bin/logstash -f /etc/logstash/pro2.conf -w 10 -l /var/log/logstash/pro2.log

然后启动 service supervisord start 即可。

logstash 会以 supervisord 子进程的身份运行,你还可以使用 supervisorctl 命令,单独控制一系列 logstash 子进程中某一个进程的启停操作:

supervisorctl stop elkpro_2


转载于:https://my.oschina.net/u/1538135/blog/669826

相关文章:

  • 数据绑定控件单选框
  • css3 翻转和旋转的区别
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 查找并修复Android中的内存泄露—OutOfMemoryError
  • java异常分类及常见异常
  • Integer对象
  • [总结]C语言二维数组作为函数的参数
  • UVa12169 Disgruntled Judge
  • 【原创】MySQL Proxy - Administration Interface
  • 详解6大安全场景:移动app安全、防DDoS、防入侵、数据加密、业务反欺诈、内容安全...
  • linux ulimit 的设置
  • 二次登陆验证
  • 电脑配置
  • 解决spring jpa中配置文件报'jpa:repositories'的问题
  • 启用约束时使用exceptions表来跟踪不符合约束的数据并修正
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【comparator, comparable】小总结
  • Android优雅地处理按钮重复点击
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • AngularJS指令开发(1)——参数详解
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Cumulo 的 ClojureScript 模块已经成型
  • IP路由与转发
  • Java多线程(4):使用线程池执行定时任务
  • Less 日常用法
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PaddlePaddle-GitHub的正确打开姿势
  • python_bomb----数据类型总结
  • Redis字符串类型内部编码剖析
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Webpack 4x 之路 ( 四 )
  • 从0到1:PostCSS 插件开发最佳实践
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 如何设计一个比特币钱包服务
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 学习HTTP相关知识笔记
  • 2017年360最后一道编程题
  • mysql面试题分组并合并列
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 进程与线程(三)——进程/线程间通信
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #Linux(权限管理)
  • #NOIP 2014# day.1 T2 联合权值
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $(selector).each()和$.each()的区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1)STL算法之遍历容器
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (笔试题)合法字符串
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (四)库存超卖案例实战——优化redis分布式锁
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)iOS字体