在bash脚本中,我想执行以下操作(在伪代码中):
if [ a process exists with $PID ]; then
kill $PID
fi
Run Code Online (Sandbox Code Playgroud)
条件语句的恰当表达式是什么?
我有一个定期失败的进程,有时会启动重复的实例..
当我运行:
ps x |grep -v grep |grep -c "processname"
我会得到:
2
这是正常的,因为进程运行恢复过程..
如果我得到了,
0
我会想要启动这个过程:
4
我会想要停止并重新启动该过程
我需要的是一种取得结果的方法 ps x |grep -v grep |grep -c "processname"
然后设置一个简单的3选项功能
ps x |grep -v grep |grep -c "processname"
if answer = 0 (start process & write NOK & Time to log /var/processlog/check)
if answer = 2 (Do nothing & write OK & time to log /var/processlog/check)
if answer = 4 (stot & restart the process & write NOK & Time to log …Run Code Online (Sandbox Code Playgroud) 我必须编写一个 bash 脚本,根据传递的命令行参数在后台启动一个进程,如果它能够成功运行启动程序,则返回。
这是我想要实现的伪代码
if [ "$1" = "PROG_1" ] ; then
./launchProg1 &
if [ isLaunchSuccess ] ; then
echo "Success"
else
echo "failed"
exit 1
fi
elif [ "$1" = "PROG_2" ] ; then
./launchProg2 &
if [ isLaunchSuccess ] ; then
echo "Success"
else
echo "failed"
exit 1
fi
fi
Run Code Online (Sandbox Code Playgroud)
脚本不能wait或sleep因为它将被另一个关键任务 C++ 程序调用并且需要高吞吐量(每秒启动的进程数),而且进程的运行时间是未知的。脚本既不需要捕获任何输入/输出,也不需要等待启动的进程完成。
我尝试了以下方法失败:
#Method 1
if [ "$1" = "KP1" ] ; then
echo "The …Run Code Online (Sandbox Code Playgroud) 我写了以下脚本
#! /bin/bash
function checkIt()
{
ps auxw | grep $1 | grep -v grep > /dev/null
if [ $? != 0 ]
then
echo $1"bad";
else
echo $1"good";
fi;
}
checkIt "nginx";
checkIt "mysql";
checkIt "php5-fpm";
Run Code Online (Sandbox Code Playgroud)
这里的问题似乎是最后一次检查checkIt "php5-fpm",它始终返回php5-fpmbad.由于连字符,似乎出现了麻烦.如果我这样做,checkIt "php5"我会得到预期的结果.我实际上可以逃脱它,因为我没有任何其他开始或包含php5的进程.然而,它变成了一个黑客,有一天会重新抬起它的丑陋头脑.我非常感谢任何能够告诉我如何获得checktt"php5-fpm"工作的人.