Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上一个命令执行完毕后,通过unix脚本执行连续命令_Unix - Fatal编程技术网

上一个命令执行完毕后,通过unix脚本执行连续命令

上一个命令执行完毕后,通过unix脚本执行连续命令,unix,Unix,我有一个unix脚本,其中一个命令需要重复执行,但只有在前一个命令成功完成后,才能下次运行该命令。我搜索了可以告诉脚本已完成执行的命令,但找不到它。我是unix脚本新手,并开始喜欢unix脚本。为了使命令仅在前一个命令成功后执行,您需要将这两个命令编写为: command1 && command2 要使用单个命令将其放入循环中,需要检查每个调用的返回状态,如果调用不成功,则退出循环;最短的形式应类似于: while your_command; do :; done 您还可以插

我有一个unix脚本,其中一个命令需要重复执行,但只有在前一个命令成功完成后,才能下次运行该命令。我搜索了可以告诉脚本已完成执行的命令,但找不到它。我是unix脚本新手,并开始喜欢unix脚本。

为了使命令仅在前一个命令成功后执行,您需要将这两个命令编写为:

command1 && command2
要使用单个命令将其放入循环中,需要检查每个调用的返回状态,如果调用不成功,则退出循环;最短的形式应类似于:

while your_command; do :; done
您还可以插入
sleep
而不是NOOP

您需要将后台命令的PID(进程id)存储在某个文件中,以便您的脚本在下次启动时可以检查其是否仍在运行。例如:

if [ ! "kill -0 $(</var/run/myscript-command.pid) 2>/dev/null 1>&2" ]; then
    somecommand&
    $CMD_PID = $!
    echo $CMD_PID >/var/run/myscript-command.pid
fi

如果不在后台显式运行命令,则脚本的下一行仅在命令完成时执行/bin/sh command1;命令2。。。。但问题是所有给定的命令都是同时执行的。然后在每个命令之后,在估计每个命令的执行时间之后,我给sleep 20。它工作得非常好:)那么
command1
启动后台作业,即使您在前台运行它?有什么办法可以防止吗?例如,某些守护进程有一个类似于
--interactive
的选项在前台运行。是:D睡眠选项。它看起来真的很傻,但我在每次发出sleep选项的命令后都尝试使用sleep命令。它工作得很好,但这是唯一可行的事情。@10hero:我不确定我是否得到了。。。要使用睡眠,您需要编写
sleep
;但很可能我误解了你的评论…对不起!!事实上,我在每个命令后使用sleep来估计每个命令的执行时间,因为每次都需要使用同一个命令。不需要估计任何东西。wile循环将等待每次调用完成,然后再继续下一次调用。睡眠只是为了在命令退出过快且不想每秒运行100次时保护您。否则,noop
就可以了。
nohup ./somecommand 0<&- &>/dev/null &