我可以安排偶尔在特定 shell 进程中运行脚本吗?

我可以安排偶尔在特定 shell 进程中运行脚本吗?

cron 可用于安排偶尔运行一个程序。但它似乎并不特定于现有的 shell 进程。

如果我有一个访问特定 bash 进程状态的脚本(例如通过脚本访问运行的输出jobsdirsshell 中的source输出),我如何安排它偶尔在特定 bash 进程中运行?

谢谢。


更新:这两个回复实际上都不能直接访问现有 bash 进程的状态。它们可以间接地将一些状态信息从父shell进程复制到子shell进程。我不记得为什么我接受了一份。

答案1

不完全确定你在做什么,但你可以启动一个后台作业来执行某些操作,然后等待 X 秒,然后重复。

例子

( while : ; do echo hello ; sleep 10 ; done ) &

答案2

您可以使用 date 命令动态调整睡眠操作的持续时间。

例子

now() { date '+%s'; }
next() { date -d $(date -d "1 hours" '+%H:00:00') '+%s'; }

( while : ; do echo "Your Tasks Here" ; sleep $(next) - $(now) ; done ) $ 

next() 函数内部日期格式被构造为按小时运行。如果您希望它每十五分钟运行一次,您可以按如下方式进行调整。

next() { date -d $(date -d "15 minutes" '+%H:%M:00') '+%s'; }

也可以看看:Linux date 命令,查找到下一小时的秒数

注意:由于睡眠操作在后台发生,杀死上面的脚本有点烦人。通过 PID 终止或考虑不将循环操作后台化。

相关内容