linux启动进程的方式

linux启动进程的方式
python

最基础的 nohup 方式

这是最简单的方式,也是 linux 新手们很容易搞混淆的一个经典问题: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

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

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

更优雅的 SCREEN 方式

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

建立独立的 screen 命令以下:工具

screen -dmS elkscreen_1

接管连入建立的 elkscreen_1 命令以下:学习

screen -r elkscreen_1

而后你能够看到一个如出一辙的终端,运行 logstash 以后,不要按 Ctrl+C,而是按 Ctrl+A+D 键,断开环境。想从新接管,依然 screen -r elkscreen_1 便可。spa

若是建立了多个 screen,查看列表命令以下:code

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

相关文章
相关标签/搜索