我正在编写一个 bash 脚本,我必须在其中执行 3 个命令。
- 命令
1
必须在后台每 10 秒运行一次 - 命令
2
并且3
必须在后台运行一次。 - 此外,命令必须在命令和执行
1
之前至少成功执行一次,因为它会生成/更新最后两个正常运行所需的文件。2
3
但是,我不知道如何使命令1
在这些条件下运行......我不能使用while(1)
asleep 10
或类似的东西,因为那样我将永远无法到达命令2
和3
.
我缺少什么 bash 脚本概念?线程,也许?
编辑:命令1
可以像在 .txt 文件中增加整数一样简单,该文件将用于命令2
和3
.
作业控制。您可以在后台启动进程,并通过了解进程 ID 和退出状态对它们进行相当细粒度的控制。
要获取后台命令的 PID,请使用该
$!
变量。要获取后台命令的退出状态,请使用
wait()
并提供其 PID。请注意,如果命令尚未退出,调用wait()
将阻塞。如果此阻塞有问题(可能是您的情况),您可以ps
在调用之前使用(或其他方法)执行检查,wait()
以查看您的进程是否准备好被收割,通常在有看门狗或其他一些的循环中设置任务执行时间限制的方法。考虑以下基于循环的样板:
对于更复杂的作业控制,您可以将命令检查和循环管理移至 bash 函数中并大量清理此代码。