shell腳本nohup
你不應該放在profile,每個用戶登錄都會運行一次的。你確定hosts文件在mali目錄下?不是mail?
另外你應該把這段代碼寫成腳本 在profile中以nohup 加後台的方式運行這個腳本。
比如 保存到/etc/init_kafka
然後在 profile中添加
nohup /etc/init_kafaka &
② 往shell腳本中傳入參數
參數如下:
$# ----傳遞給程序的總的參數數目
$? ----上一個代碼或者shell程序在shell中退出的情況,如果正常退出則返回0,反之為非0值。
$* ----傳遞給程序的所有參數組成的字元串。
$n ----表示第幾個參數,$1 表示第一個參數,$2 表示第二個參數 ... $0 ----當前程序的名稱
$@----以"參數1" "參數2" ... 形式保存所有參數
$$ ----本程序的(進程ID號)PID
$! ----上一個命令的PID
③ 關於一個shell腳本的解釋問題
cd `dirname $0` //首先cd到腳本所在目錄
jar_file=$(ls *.jar) //然後列出jar格式的文件,並賦值給jar_file變數
mole_name=${jar_file%.*} //刪掉最後一個 . 及其右邊的字元串,即擴展名
now_date=$(date +%Y-%m-%d) //按格式取當前日期
// 下面這句是查找名為變數 mole_name 的進程,然後再找java進程。// 然後顯示出第一行,第二個域。總的來說就是查找進程的PID
pid=$(ps -ef|grep ${mole_name}|grep java|head -n 1|awk '{print $2}');
echo kill ${mole_name} pid:${pid} // 結束上面找到進程
kill -9 $pid
// 設置JVM運行參數,最小內存386mb,最大內存512mb
JAVA_OPTS="-Xms386m -Xmx512m" 設置
// 如果沒有logs目錄則新建if [ ! -d "logs" ]; then
mkdir logs
fi
// 重新執行變數jar_file變數指向的文件,並輸出日誌到logs目錄下的.out文件中,同時重新查找pid。
nohup java $JAVA_OPTS -jar ${jar_file} $params > logs/${mole_name}.out 2>&1 &
pid=$(ps -ef|grep ${mole_name}|grep java|head -n 1|awk '{print $2}');// 顯示進程信息。
echo mole:${mole_name} startup finish pid:${pid}.
sleep 0.5
echo ${pid} > ${mole_name}.pid
綜上所述,這段代碼用於重啟spring boot進程。
④ 求教sh腳本編寫動態控制nohup日誌文件。以下是相關需求
logrotate的自己男人的logrotate的
⑤ Shell怎麼做守護腳本
寫兩個腳本,兩個要互相調用並檢查存不存在,如果要做守護的話實際上還要檢查被拉起的程序
第一個腳本654321.sh
[[-z$(ps-ef|grep123456.sh|grep-v)]]&&nohupsh123456.sh&
第二個腳本123456.sh
[[-z$(ps-ef|grep654321.sh|grep-v)]]&&nohupsh654321.sh&
兩個互相檢查進程在不在,不在就拉起來
⑥ shell腳本中用nohup啟動3個進程,輸入回車後會有一或兩個進程被殺掉,是什麼原因
改寫為:
( nohup ./a ) &
( nohup ./b ) &
( nohup ./c ) &
wait
說明:開啟三個子shell在後台執行操作,( )表示開啟子shell,
若不加圓括弧直接這樣寫,則直接在父shell操作,可能造成邏輯錯誤,因為這個不是在命令行執行 的進程,
wait根據實際情況添加,表示等前面三個進程執行結束在進行下一步
⑦ 關於linux系統shell中有nohup命令,放入到crontab無法執行
要具體看下是什麼命令(請復制出來),因為crontab執行時的環境變數PATH可能和界面上的bash不一樣,有可能找不到所需的命令,這時候需要使用絕對路徑,並不是nohup的問題。
另外也要看下crontab的服務是否已經運行,否則是不會有定時任務執行的
⑧ shell腳本中count_log=`ls logs_backup/nohup* | grep $nowdate -c`是什麼意思
count_log=`lslogs_backup/nohup*|grep$nowdate-c`
count_log:
定義shell變數
=:
給shell變數賦值(注意等號兩邊不能有空格,和C語言區別)
``:
反引號``是命令替換,命令替換是指Shell可以先執行``中的命令,
將輸出結果暫時保存,在適當的地方輸出。
ls:
列出文件
logs_backup/nohup*:
logs_backup目錄下所有以nohup開頭的文件
|:
管道符,把前面命令的輸出作為管道符後面命令的輸入
grep:
文本搜索工具
搜索變數$nowdate,前面nowdata變數被賦值為當前時間
-c是grep命令的選項,計數搜索到匹配字元的次數。
整條命令:
給count_log變數賦值,值為logs_backup目錄下文件前綴為bohup*文件內容含有
當前腳本執行時間的字元出現的次數。
⑨ nohup sh./start.sh &與nohup ./start.sh &有什麼區別
nohup sh./start.sh &與nohup ./start.sh &的區別:
nohup,就是用nohup.out代替tty,避免掛起。
sh xxx.sh是用sh 執行start.sh,start.sh可以沒有執行標志,可以不用加./,可以不用在腳本第一行寫上#/bin/sh(當然,bsh可以不寫)。
./start.sh是調用腳本第一行制定的shell去解釋執行,預設為sh,就是bsh &表示後台運行。