it-roy-ru.com

Как запустить скрипт в определенное время в Linux?

У меня есть текстовый файл, содержащий определенную дату и время. Я хочу иметь возможность запустить сценарий во время, указанное в этом файле. Как бы вы этого достигли? Создать другой сценарий, который работает в фоновом режиме (вроде демона) и проверяет каждую секунду, соответствует ли текущее время времени в файле? Есть ли другой способ? Машина является сервером linux, Debian wheezy. заранее спасибо

72
Aaron Ullal

Посмотрите на следующее:

echo "ls -l" | at 07:00

Эта строка кода выполняет "ls -l" в определенное время. Это пример выполнения чего-либо (команда в моем примере) в определенное время. "at" - это команда, которую вы действительно искали. Вы можете прочитать спецификации здесь:

http://manpages.ubuntu.com/manpages/precise/en/man1/at.1posix.htmlhttp://manpages.ubuntu.com/manpages/xenial/man1/ at.1posix.html

Надеюсь, поможет!

134
Antoni

Команда at существует специально для этой цели (в отличие от cron, которая предназначена для планирования повторяющихся задач).

at $(cat file) </path/to/script
14
tripleee

Cron хорошо для того, что будет работать периодически, например, каждую субботу в 4 часа утра. Также есть анакрон, который работает с отключениями питания, сном и так далее. А также в.

Но для одноразового решения, которое не требует root или чего-либо еще, вы можете просто использовать date, чтобы вычислить секунды с начала эпохи целевого времени, а также настоящее время, а затем использовать expr чтобы найти разницу, и sleep столько секунд.

7
Anony

Обычно в Linux вы используете crontab для такого рода запланированных задач. Но вы должны указать время, когда вы "настраиваете таймер" - поэтому, если вы хотите, чтобы он был настраиваемым в самом файле, вам нужно будет создать какой-то механизм для этого.

Но в целом вы бы использовали, например:

30 1 * * 5 /path/to/script/script.sh

Будет исполнять сценарий каждую пятницу в 1:30 (AM) Здесь:

30 это минуты

1 это час

следующие 2 *: day of month и month (в таком порядке), а 5 - день недели

6
julumme