在 bash 中运行定时后台作业

在 bash 中运行定时后台作业

我想每 30 秒在 bash 中执行一个命令,并将其作为后台作业运行。形式这个帖子,我认为使用 watch 命令很有用。然而,每次我尝试将其设置为背景时,它都会停止。

watch -n 1 'date >> dateFile.txt'

作品。我可以cat dateFilet.txt看到一堆线条。

watch -n 1 'date >> dateFile.txt' &

回报

[1]+ Stopped watch -n 1 'date >> dateFile.txt'

执行bg再次返回同一行。

我究竟做错了什么?我如何解决它?我最终想要做的是每分钟左右获取一个文件,以使 bash 会话中的某些变量保持最新。

答案1

在 bash 中,您可以使用以下命令轻松完成此操作PROMPT_COMMAND变量(来自man bash):

提示命令

如果设置,则该值将在发出每个主提示之前作为命令执行。

因此,如果您将这样的内容添加到您的~/.bashrc

PROMPT_COMMAND=". /path/to/file"

您将可以使用该文件中定义的所有变量。

答案2

在你的crontab

* * * * * date >> dateFile.txt & sleep 30; date >> dateFile.txt &

很简单,不是吗? =)

(最好输入命令的完整路径date

另一个解决方案:

while true; do date >> dateFile.txt & sleep 30; done

答案3

我最终想要做的是每分钟左右获取一个文件,以使 bash 会话中的某些变量保持最新。

  • 不能从子进程中执行此操作。
  • 不能从父进程执行此操作。
  • 不能从您希望它影响的进程以外的任何进程执行此操作。

更改进程的环境与更改进程的私有内存相同(事实上,这正是所涉及的)。绝对不允许!这就是为什么工控机就是这样一个精致的境界。

相关内容