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

81

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

Аарон Уллал
источник
4
По какой причине cron не работает?
lreeder
12
Почему эта тема закрыта ?? Это очень разумный вопрос. Поиск в Google привел вас к этому номеру №1. И ответы довольно скучные. Так что тот, кто сможет ответить, ясно, что английский будет заблокирован
Ричард де Ри
2
@Richard Я подозреваю, что причина, по которой StackOverflow закрывает так много подобных вопросов, заключается в том, чтобы побудить пользователей задавать вопросы, не относящиеся к теме, на соответствующем сайте StackExchange. Есть довольно много новых сайтов SE, которых раньше не было. Например, есть довольно много очень полезных вопросов Vim по SO, которые были закрыты как не по теме, и теперь, когда есть Vi / Vim SE, эти вопросы будут там по теме. Просто размышляю. Однако это все еще кажется вопросом программирования,
Мгарей
2
Tbh Я забываю, как использовать cron каждый раз после того, как выучил его, и мне не нужно ничего продвинутого.
sudo

Ответы:

148

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

echo "ls -l" | at 07:00

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

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

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

Антони
источник
2
получить сообщение об ошибке Can't open /var/run/atd.pid to signal atd. No atd running??
HappyCoding
2
Для использования вам нужен atdзапущенный демон at. В Manjaro OpenRC вы можете просто установить at-openrcи добавить службу демона atd с помощью: sudo rc-update add atdи начать с sudo rc-service atd start. Обычно в atпакет уже включена systemdслужба (система инициализации / обслуживания по умолчанию в различных дистрибутивах Linux, включая Ubuntu), с которой его можно запустить sudo systemctl start atdи включить автозапуск при инициализации с помощью sudo systemctl enable atd.
Маноэль Вилела
8
В моем случае это сразу же выводит «job 6 at 2017-08-21 10:53» ...
Jewenile
Кстати, моя документация по bash описывает at -cиспользование. Для чего это, если способ выполнить команду - передать ее в std in?
Tom Russell
Будет ли этот сценарий запускаться позже, если в это время система была выключена?
shrijit
18

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

at $(cat file) </path/to/script
тройной
источник
1
с bash, вы бы написали$(< file)
Гленн Джекман
10

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

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

Anony
источник
10
atРабота будет по- прежнему планируется , даже если машина перезагружается в то же время.
tripleee
8

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

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

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

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

30 это минуты

1 час

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

Julumme
источник
2
так как бы вы запустили эту команду?
Аарон Уллал,
1
Crontab Guru ( crontab.guru ) - полезный инструмент для настройки crontab.
Umesh .A