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