簡體   English   中英

Bash 腳本 nohup 執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM