linux启动进程的方式
python
这是最简单的方式,也是 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 算是 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
无论是 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