作業系統:win7
虛擬機器:centos7
最近搭建了elasticsearch+kibana
,其中由於elasticsearch
官方自帶後台啟動,並且會產生pid
檔案,所以我自己就寫了指令碼使其變成系統命令。可以參考:
將自己寫的es指令碼變成系統的新命令
但是,kibana
官方卻沒有自帶後台啟動的引數。假設使用&
的方式,雖然可以做到後台啟動,但是卻不能產生pid
檔案。為什麼一定要產生pid
檔案呢?
因為這是linux
的一種規範,你會發現,凡是你安裝的比較正規的軟體,都會產生pid
檔案,它是用來記錄程序的id
。也因此,也可以通過判斷是否產生pid
來確定程式是否啟動。不過,也正因為它只是一種規範,所以不是一定要遵守的,比如kibana
它啟動時,就不會產生pid
檔案。
啟動kibana
官方命令是
bin/kibana
經過我多次測試後,自己手寫的指令碼:
#! /bin/bash
echo
"current pid: $$"
#這句刪除也可以
#cp /dev/null kibana.log
bin/kibana > kibana.log 2>&1 &
echo
"$!"
echo
"$!" > pid #將上乙個後台程序寫入到pid檔案中
分析:
bin/kibana > kibana.log
2>&1 &
這句話的作用就是 啟動kibana
,並且後台啟動,將標準輸出和標準錯誤資訊重定向kibana.log
檔案中。
進一步分析就是:
bin/kibana > kibana.log # 將標準輸出寫入kibana.log中
2>&1
# 將標準錯誤資訊重定向到標準輸出中
& # 後台啟動,但是假設關閉終端crt,啟動的程式也會停止
#可以使用nohup,即使關閉終端,程式也不會停止
nohup bin/kibana > kibana.log 2>&1 &
上面指令碼中$$
和$!
是內建。
$$
表示的是當前程序id
$!
表示的是上乙個後台程序
所以echo "$!"
這句一定要放到啟動kibana
命令的後面。echo "$!" > pid
就是將上乙個後台程序id
也就是kibana
的程序id
重定向到pid
中。
重定向時,會先去判斷檔案pid
是否存在。假設不存在,會自動建立,並且每次都是重新寫入,而不是追加。
執行指令碼:
./kibana.sh
就會產生pid
檔案。
並且啟動時,產生的日誌都會重定向到kibana.log
中。(kibana.log
也是自己建立的)
如果不想每次都進入kibana
目錄來啟動kibana
,可以把自己寫的指令碼放到usr/bin
中,使其變成系統命令。
①把指令碼放到usr/bin的目錄中
②調整好指令碼
調整後的指令碼:
#!/bin/bash
# 先進入相關目錄
cd /usr/programe_files/kibana-5.2.2/
if [ $1 == "start" ];then
nohup bin/kibana > kibana.log 2>&1 &
echo
"$!" > pid
elif [ $1 == "stop" ];then
kill `cat pid`
else
echo
"please make sure the position variable is start or stop."
fi
再把指令碼名去掉.sh
,就可以使用:
啟動命令:kibana start
停止命令:kibana stop
程序後台啟動方法
1.忽略hup命令 hup 1 終端斷線 可用 nohup guard 重定向輸出檔名 2.將程序id設定為不在hup命令管轄範圍。setsid 呼叫setsid函式的程序成為新的會話的領頭程序,並與其父程序的會話組和 程序組 脫離。由於會話對控制終端的獨占性,程序同時與控制終端脫離,其程序父程序為...
linux關於後台啟動程式
正經學徒,佛系記錄,不搞事情 最終語句 nohup test.sh 1 dev null 2 1 解釋 建立test.sh測試指令碼 vi test.sh 內容 bin bash while true do echo 不停的執行 sleep 5 done 設定檔案許可權可執行 結果是內容直接輸出在控...
linux下後台啟動weblogic
進入到 weblogic user projects domains base domain bin目錄下,檢視.sh的檔案 ls sh 可以查出startweblogic.sh和stopweblogic.sh,這個就是weblogic當前域的啟動關閉命令。直接執行就可以啟動關閉這個域。但是直接執行...