如何定期以极短的间隔运行命令并获得收益?


12

我需要在大约5秒钟的间隔内调用特定命令。如何设置后台运行的守护进程/进程或类似的方法?我看了cronjobs,但最小间隔似乎是1分钟。任何建议表示赞赏;)

Fedora是系统。

编辑该命令将是一个bashscript,所以我认为“监视”不会这样做。

Answers:


10
(
  while true
  do
    your-command-here
    sleep 5
  done
) &
disown

什么被剥夺?如果没有它我该怎么办?
汉斯

@Marcel,disown从shell作业表中删除最后一个作业,使其像您所要求的那样成为守护程序。它不是真正的守护程序,因为它仍然连接到终端并且在同一进程组中,但是在关闭外壳程序后它将继续运行。
朱利诺

好的,那很好用:D只是出于好奇,我将如何“制作”一个守护进程?
汉斯,

@Marcel的简单方法是从C或具有库访问权限的其他语言(而不是从Shell脚本)调用daemon(3)。这是很难的方法
朱利诺

14

您为什么认为“手表”不起作用?

$ cat periodic.sh
#!/bin/bash
echo $(date)
$ chmod +x periodic.sh

$ watch -n 5 ./periodic.sh

如果我注销该怎么办?该脚本应继续运行。
汉斯,

它将停止,但是您可以使用nohup watch -n 5 ./periodic.sh > periodic.log &和存储输出。
naufraghi 2011年

对于管道,请使用“引号”,因为“命令”被赋予“ sh -c”,这意味着您可能需要使用额外的引号才能获得所需的效果”
andrej 2013年


1

watch命令适合您的情况,我将使用终端多路复用器(例如tmux,屏幕等),然后使用

watch -n 5 ./script.sh

在那种情况下,即使您关闭与计算机的终端或ssh连接,脚本仍将运行。

这种方法的唯一局限性是,脚本只有在该时间间隔内完成执行后,才会每5秒运行一次。


由于OP明确表示他认为watch不会这样做,因此请解释为什么您的答案克服了此限制,或者在这一点上您认为OP错误地认为watch不适合该任务。
AdminBee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.