cron 可用于安排偶尔运行一个程序。但它似乎并不特定于现有的 shell 进程。
如果我有一个访问特定 bash 进程状态的脚本(例如通过脚本访问运行的输出jobs
和dirs
shell 中的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 终止或考虑不将循环操作后台化。