[英]Bash script nohup execution
我有以下 bash 腳本,用於檢查是否有 6 個 FFmpeg 腳本正在運行,如果沒有,它會終止重命名的 FFmpeg pid。
我的問題是 kill 命令“kill -9 $i”有效,但代碼不會繼續 nohup 代碼。
這是我的輸出:
Service Count 6 currently running 5
Some services has failed
Killing pid 11794
Killing pid 11795
Killing pid 11805
Killed
我假設“殺死”意味着我的腳本停止了。 如果我刪除“kill -9 $1”,代碼將繼續執行 nohup 命令。 關於我做錯了什么的任何想法?
我的腳本:
#!/bin/bash
arrSize=6;
array=(`ps aux | grep -i ffmpeg | awk '{print $2}'`);
# Array Length
echo "Service Count $arrSize currently running ${#array[@]}"
# echo "Length ${#array[@]}"
if (( ${#array[@]} < $arrSize ))
then
echo Some services has failed
for i in "${array[@]}"
do
echo "Killing pid $i";
kill -9 $i
done
echo Staring camera 1
nohup ffmpeg -nostdin -loglevel panic -i "http://electcam1.site.com/mjpg/video.mjpg" -q 0 -f mpegts -codec:v mpeg1video -s 1366x768 http://127.0.0.1:8081/secret &
exit
# sleep 1
echo Starting camera 2
nohup ffmpeg -nostdin -loglevel panic -i "http://electcam2.site.com/mjpg/video.mjpg" -q 0 -f mpegts -codec:v mpeg1video -s 1366x768 http://127.0.0.1:8083/secret &
# exit
else
echo All services are running;
fi
不要使用ps aux | grep
ps aux | grep
除了打印漂亮的人類可讀行。 要查找命令的 pid,請使用pgrep
。 要終止這些命令,請使用pkill
。
IFS=$'\n' array=($(pgrep '^ffmpeg$'))
使用http://shellcheck.net檢查您的腳本。 不要使用反引號 ` - 使用$(..)
代替。 請記住引用變量擴展。
為了控制服務,我建議在 systemd 的現代 unix-es 上使用您的工作站服務管理器(這實際上是為管理服務而設計的...)。 如果目標是自己編寫,仍然使用現有的工具,比如 supervisord。 如果目標不是使用它,請記住,通過殺死工作站上的所有ffmpeg,您將不小心殺死其他不相關的 ffmpeg 實例。 相反,一種常見的方法是將 pid 保存到一個文件中(通常在 /var/run/something.pid 文件中),然后使用該文件來確定服務是否正在運行。 看看服務管理看起來像 ex。 在 openrc 中。 但充其量使用您的本地服務管理器而不是重新發明輪子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.