Bash脚本nohup执行

Bash脚本nohup执行,bash,Bash,我有下面的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 我想“被杀”意味着我的脚本停止了。如果

我有下面的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
#/bin/bash
arrSize=6;
数组=(`ps aux | grep-i ffmpeg | awk'{print$2}`);
#数组长度
echo“当前运行${#数组[@]}的服务计数$arrSize”
#回显“长度${#数组[@]}”
if(${#数组[@]}<$arrSize))
然后
一些服务失败了
对于“${array[@]}”中的i
做
回声“杀死pid$i”;
杀戮-9$i
完成
回声凝视照相机1
nohup ffmpeg-NOSTIN-loglevel恐慌-i“http://electcam1.site.com/mjpg/video.mjpg“-q 0-f mpegts-编解码器:v mpeg1视频-s 1366x768http://127.0.0.1:8081/secret & 
出口
#睡眠1
回波启动摄像机2
nohup ffmpeg-NOSTIN-loglevel恐慌-i“http://electcam2.site.com/mjpg/video.mjpg“-q 0-f mpegts-编解码器:v mpeg1视频-s 1366x768http://127.0.0.1:8083/secret &
#出口
其他的
所有服务都在运行;
fi

不要使用
ps aux | grep
,除非用于打印美观的人类可读行。要查找命令的pid,请使用
pgrep
。要终止这些命令,请使用
pkill

IFS=$'\n' array=($(pgrep '^ffmpeg$'))
请使用检查脚本。不要使用反勾号`-使用
$(..)
。记住引用变量展开式


为了控制服务,我建议在systemd的现代unix es上使用您的工作站服务管理器(它实际上是为了管理服务而设计的…)。如果目标是自己编写,仍然使用现有的util,比如supervisord。如果目标不是使用它,请记住,通过杀死工作站上的所有ffmpeg,您将意外杀死其他不相关的ffmpeg实例。相反,一种常见的方法是将pid保存到一个文件(通常在/var/run/something.pid文件中),然后使用该文件确定服务是否正在运行。查看服务管理在openrc中的外观。但最好使用您的本地服务管理器,而不是重新发明轮子。

不要使用
ps aux | grep
,除非用于打印美观的人类可读行。要查找命令的pid,请使用
pgrep
。要终止这些命令,请使用
pkill

IFS=$'\n' array=($(pgrep '^ffmpeg$'))
请使用检查脚本。不要使用反勾号`-使用
$(..)
。记住引用变量展开式


为了控制服务,我建议在systemd的现代unix es上使用您的工作站服务管理器(它实际上是为了管理服务而设计的…)。如果目标是自己编写,仍然使用现有的util,比如supervisord。如果目标不是使用它,请记住,通过杀死工作站上的所有ffmpeg,您将意外杀死其他不相关的ffmpeg实例。相反,一种常见的方法是将pid保存到一个文件(通常在/var/run/something.pid文件中),然后使用该文件确定服务是否正在运行。查看服务管理在openrc中的外观。但最好使用您的本地服务管理器,而不是重新发明轮子。

不要
ps aux | grep
你知道我做错了什么吗?
你在自杀。您的脚本是否有
“ffmpeg
在名称中?另一方面,考虑使用一些真正的服务管理,如StReD,而不是重新创建Wald.YUP,这是因为我在脚本名称中有FFMPEG。谢谢我从来没有使用过系统,所以我会仔细研究一下,不要
ps aux | grep
你知道我做错了什么吗?
你在自杀。你的脚本在名称中有<代码>“FFMPEG/CODE >吗?另一方面,考虑使用一些真正的服务管理,如Syrd,而不是重新创建Wald.YUP,这是因为我在脚本名称中有FFMPEG。谢谢。我从来没有使用过系统,所以我会仔细研究一下。