在Linux中,将任务计划为小时,分钟,秒精度

时间:2014-02-21 15:45:55

标签: linux task schedule seconds

我只想在确切的时间“16:22:36”运行shell脚本。像“at”这样的实用程序没用,因为它们没有“秒”。 “睡眠”不起作用,因为循环提前8小时由于某种原因结束:s,我搜索了整个谷歌,找不到任何工具。那么像Linux这样庞大的Os没有合适的任务调度程序?

3 个答案:

答案 0 :(得分:7)

标准cron缺少第二次精确计划,因为

  1. Unix服务器管理传统上很少需要一秒精度
  2. 对于像“每秒运行此任务”这样的多用户系统,它可能会以这种令人不安的方式使用
  3. 然而,在GNU Coreutils套件的sleep(1)的帮助下,您可以实现真正的第二次精确作业调度。

    示例:等待12:14:05和12:14:10

    $ crontab -l
    (snip...)
    14 12 * * * sleep 5; date > /tmp/plain.txt
    14 12 * * * while [ "1410" -gt "$(date +\%M\%S)" ]; do /bin/sleep 0.1; done; date > /tmp/while.txt
    

    (等一会儿......)

    $ ls -l --time-style=full-iso /tmp/*.txt
    -rw-r--r-- 1 nodakai nodakai 43 2014-02-22 12:14:06.236151567 +0800 /tmp/plain.txt
    -rw-r--r-- 1 nodakai nodakai 43 2014-02-22 12:14:10.007600677 +0800 /tmp/while.txt
    

    从第1版开始,14 12中的crontab并不能保证12:14:00敏锐。第二个版本使用while循环和亚秒sleep(1)来实现亚秒精度。

    请注意,除非您使用NTP将计算机时钟与时间服务器同步,否则谈论第二次精确作业调度毫无意义。

答案 1 :(得分:4)

你可以创建一个小时和分钟的crontab条目,睡眠时间为36秒

22 16 * * * sleep 36; shell_script.sh

答案 2 :(得分:0)

Linux有一个很棒的任务调度程序,名为crontab。网上有大量有关它的信息。虽然简单地说“这就是它的作用以及如何使用它”:http://kvz.io/blog/2007/07/29/schedule-tasks-on-linux-using-crontab/ - 应该让你开始。