Bash脚本nohup执行
我有下面的bash脚本,它检查是否有6个FFmpeg脚本正在运行,如果没有,它将停止重命名FFmpeg-pid 我的问题是kill命令“kill-9$i”可以工作,但代码不能继续执行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 我想“被杀”意味着我的脚本停止了。如果
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。谢谢。我从来没有使用过系统,所以我会仔细研究一下。