2014-02-21 2 views
3

Я просто хочу запустить оболочку, чтобы сказать это точное время «16:22:36». Утилиты типа «at» бесполезны, так как у них нет «секунд». «Сон» не работает, так как цикл заканчивается на 8 часов раньше времени по какой-то причине: s, я искал по всему Google и не мог найти никаких инструментов. поэтому у огромных Os, подобных Linux, нет подходящего планировщика задач?В Linux задание расписания на часовую, минутную, вторую точность

ответ

0

У Linux есть замечательный планировщик задач, называемый crontab. В Интернете есть много информации об этом. Как простой «это то, что он делает и как его использовать», хотя: http://kvz.io/blog/2007/07/29/schedule-tasks-on-linux-using-crontab/ - Должен вас начать.

+0

За исключением того, что минимальный таймфрейм в cron составляет 1 минуту ... – evuez

+0

Предоставлено, но, как указывает @Vimsha, есть способы обойти это. Это все еще лучший вариант imho. – LokiSinclair

+0

Правильно, но просто хотел указать на это, поскольку в статье, с которой вы связались, не упоминалось о сном. – evuez

4

Вы можете создать crontab записи в течение часа и минуты с сном 36 секунд

22 16 * * * sleep 36; shell_script.sh 
+1

, так что у Linux действительно нет планировщика задач со встроенными секундами? Зачем? как? Я имею в виду...!!! – user3334860

+2

Вы предполагали, что '22 16' запустится в 16:22:00, но, к сожалению, это обязательно не произойдет. – nodakai

7

Стандарта cron не хватает второй точность планирования, поскольку

  1. администрирования серверов Unix традиционно требуется редко одно- вторая точность
  2. Может использоваться таким возмутительным способом для многопользовательской системы, как «Выполнять эту задачу каждую секунду»

Однако с помощью sleep(1) из пакета GNU Coreutils вы можете добиться правильного планирования работы по заданной второй задаче.

Пример: ждать 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 sharp. Вторая версия использует цикл while и подсечку sleep(1) для достижения точности по второму.

Обратите внимание, что, если вы не используете NTP для синхронизации часовых часов с серверами времени, бессмысленно говорить о планировании планирования второй точности.

Смежные вопросы