Как начать работу в точное время?

Я хочу начать задание записи в точное время. Как я понимаю, cron гарантирует выполнение задания в течение одной минуты.

Одним из возможных решений является запуск задания cron раньше, чем дождаться точного времени. Какие у меня есть другие возможности?

4
задан 21 February 2011 в 16:24

10 ответов

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать at. По крайней мере, man-страница at говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив at задание, которое записывает время, например, скрипт оболочки, выполняющийся

date > ~/at_test

Если вы идете с помощью cron-маршрута, date +%s является вашим другом.

Например

#!/bin/bash
target_time=1298301898
let wait_time=target_time-`date +%s`
if [ $wait_time -gt 0 ]; then
 sleep wait_time
fi
# Execute your code

При таком подходе ваша следующая проблема заключается в том, чтобы определить, как определить target_time. Если вы всегда знаете, что хотите начать его в следующую минуту, вы можете использовать

sleep 2 # Avoid running on xx:59, if cron starts immediately.
let wait_time=60-`date +%M`
sleep wait_time

, чтобы дождаться изменения минут.

5
ответ дан 25 May 2018 в 22:53
  • 1
    Используя идею Олли .. Я собрал скрипт, который будет обратный отсчет, до указанного миллисекундного времени. Сначала он опроса один раз в секунду (для отображения обратного отсчета), пока он не находится в пределах пары секунд от целевого времени, и затем переходит к проверке времени каждого миллисекунды. Вот ссылка paste.ubuntu.com/570361 ... * (новая ссылка) * – Peter.O 22 February 2011 в 07:03
  • 2
    @ fred.bear: Это выглядит ... сложным, но с другой стороны, когда вам нужна более высокая точность, чем + -1, это сложнее. – Olli 22 February 2011 в 12:59

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать at. По крайней мере, man-страница at говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив at задание, которое записывает время, например, скрипт оболочки, выполняющийся

date > ~/at_test

Если вы идете с помощью cron-маршрута, date +%s является вашим другом.

Например

#!/bin/bash target_time=1298301898 let wait_time=target_time-`date +%s` if [ $wait_time -gt 0 ]; then sleep wait_time fi # Execute your code

При таком подходе ваша следующая проблема заключается в том, чтобы определить, как определить target_time. Если вы всегда знаете, что хотите начать его в следующую минуту, вы можете использовать

sleep 2 # Avoid running on xx:59, if cron starts immediately. let wait_time=60-`date +%M` sleep wait_time

, чтобы дождаться изменения минут.

5
ответ дан 25 July 2018 в 22:27

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать at. По крайней мере, man-страница at говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив at задание, которое записывает время, например, скрипт оболочки, выполняющийся

date > ~/at_test

Если вы идете с помощью cron-маршрута, date +%s является вашим другом.

Например

#!/bin/bash target_time=1298301898 let wait_time=target_time-`date +%s` if [ $wait_time -gt 0 ]; then sleep wait_time fi # Execute your code

При таком подходе ваша следующая проблема заключается в том, чтобы определить, как определить target_time. Если вы всегда знаете, что хотите начать его в следующую минуту, вы можете использовать

sleep 2 # Avoid running on xx:59, if cron starts immediately. let wait_time=60-`date +%M` sleep wait_time

, чтобы дождаться изменения минут.

5
ответ дан 26 July 2018 в 21:39

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать at. По крайней мере, man-страница at говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив at задание, которое записывает время, например, скрипт оболочки, выполняющийся

date > ~/at_test

Если вы идете с помощью cron-маршрута, date +%s является вашим другом.

Например

#!/bin/bash target_time=1298301898 let wait_time=target_time-`date +%s` if [ $wait_time -gt 0 ]; then sleep wait_time fi # Execute your code

При таком подходе ваша следующая проблема заключается в том, чтобы определить, как определить target_time. Если вы всегда знаете, что хотите начать его в следующую минуту, вы можете использовать

sleep 2 # Avoid running on xx:59, if cron starts immediately. let wait_time=60-`date +%M` sleep wait_time

, чтобы дождаться изменения минут.

5
ответ дан 31 July 2018 в 12:53

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать at. По крайней мере, man-страница at говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив at задание, которое записывает время, например, скрипт оболочки, выполняющийся

date > ~/at_test

Если вы идете с помощью cron-маршрута, date +%s является вашим другом.

Например

#!/bin/bash target_time=1298301898 let wait_time=target_time-`date +%s` if [ $wait_time -gt 0 ]; then sleep wait_time fi # Execute your code

При таком подходе ваша следующая проблема заключается в том, чтобы определить, как определить target_time. Если вы всегда знаете, что хотите начать его в следующую минуту, вы можете использовать

sleep 2 # Avoid running on xx:59, if cron starts immediately. let wait_time=60-`date +%M` sleep wait_time

, чтобы дождаться изменения минут.

5
ответ дан 2 August 2018 в 03:54

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать в . По крайней мере, man-страница в говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив в задание, которое записывает время, например, сценарий оболочки, запущенный

  date & gt;  ~ / at_test  

Если вы идете с cron-маршрутом, date +% s является вашим другом.

Например

  #! / bin / bash target_time = 1298301898 let wait_time = target_time -dat +% s`, если [$ wait_time -gt 0];  затем sleep wait_time fi # Выполнить свой код  

При таком подходе ваша следующая задача - выяснить, как определить target_time. Если вы всегда знаете, что хотите запустить его в следующую минуту, вы можете использовать

  sleep 2 # Избегайте работы на xx: 59, если cron запускается немедленно.  let wait_time = 60 -date +% M` sleep wait_time  

, чтобы ждать, пока минута не изменится.

5
ответ дан 4 August 2018 в 19:57

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать в . По крайней мере, man-страница в говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив в задание, которое записывает время, например, сценарий оболочки, запущенный

  date & gt;  ~ / at_test  

Если вы идете с cron-маршрутом, date +% s является вашим другом.

Например

  #! / bin / bash target_time = 1298301898 let wait_time = target_time -dat +% s`, если [$ wait_time -gt 0];  затем sleep wait_time fi # Выполнить свой код  

При таком подходе ваша следующая задача - выяснить, как определить target_time. Если вы всегда знаете, что хотите запустить его в следующую минуту, вы можете использовать

  sleep 2 # Избегайте работы на xx: 59, если cron запускается немедленно.  let wait_time = 60 -date +% M` sleep wait_time  

, чтобы ждать, пока минута не изменится.

5
ответ дан 6 August 2018 в 04:00

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать в . По крайней мере, man-страница в говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив в задание, которое записывает время, например, сценарий оболочки, запущенный

  date & gt;  ~ / at_test  

Если вы идете с cron-маршрутом, date +% s является вашим другом.

Например

  #! / bin / bash target_time = 1298301898 let wait_time = target_time -dat +% s`, если [$ wait_time -gt 0];  затем sleep wait_time fi # Выполнить свой код  

При таком подходе ваша следующая задача - выяснить, как определить target_time. Если вы всегда знаете, что хотите запустить его в следующую минуту, вы можете использовать

  sleep 2 # Избегайте работы на xx: 59, если cron запускается немедленно.  let wait_time = 60 -date +% M` sleep wait_time  

, чтобы ждать, пока минута не изменится.

5
ответ дан 7 August 2018 в 21:57

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать в . По крайней мере, man-страница в говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив в задание, которое записывает время, например, сценарий оболочки, запущенный

  date & gt;  ~ / at_test  

Если вы идете с cron-маршрутом, date +% s является вашим другом.

Например

  #! / bin / bash target_time = 1298301898 let wait_time = target_time -dat +% s`, если [$ wait_time -gt 0];  затем sleep wait_time fi # Выполнить свой код  

При таком подходе ваша следующая задача - выяснить, как определить target_time. Если вы всегда знаете, что хотите запустить его в следующую минуту, вы можете использовать

  sleep 2 # Избегайте работы на xx: 59, если cron запускается немедленно.  let wait_time = 60 -date +% M` sleep wait_time  

, чтобы ждать, пока минута не изменится.

5
ответ дан 10 August 2018 в 10:12

Самый простой способ - поставить задачу cron, чтобы начать ее минуту раньше, а затем добавить время по своему усмотрению.

Вы также можете использовать в . По крайней мере, man-страница в говорит, что вы можете использовать довольно точное время, включая секунды. Вы можете проверить это, добавив в задание, которое записывает время, например, сценарий оболочки, запущенный

  date & gt;  ~ / at_test  

Если вы идете с cron-маршрутом, date +% s является вашим другом.

Например

  #! / bin / bash target_time = 1298301898 let wait_time = target_time -dat +% s`, если [$ wait_time -gt 0];  затем sleep wait_time fi # Выполнить свой код  

При таком подходе ваша следующая задача - выяснить, как определить target_time. Если вы всегда знаете, что хотите запустить его в следующую минуту, вы можете использовать

  sleep 2 # Избегайте работы на xx: 59, если cron запускается немедленно.  let wait_time = 60 -date +% M` sleep wait_time  

, чтобы ждать, пока минута не изменится.

5
ответ дан 13 August 2018 в 16:34
  • 1
    Используя идею Олли .. Я собрал скрипт, который будет обратный отсчет, до указанного миллисекундного времени. Сначала он опроса один раз в секунду (для отображения обратного отсчета), пока он не находится в пределах пары секунд от целевого времени, и затем переходит к проверке времени каждого миллисекунды. Вот ссылка paste.ubuntu.com/570361 ... * (новая ссылка) * – Peter.O 22 February 2011 в 07:03
  • 2
    @ fred.bear: Это выглядит ... сложным, но с другой стороны, когда вам нужна более высокая точность, чем + -1, это сложнее. – Olli 22 February 2011 в 12:59

Другие вопросы по тегам:

Похожие вопросы: