Як запустити сценарій у певний час на Linux? [зачинено]


81

У мене є текстовий файл, що містить певну дату та час. Я хочу мати можливість запускати скрипт у час, зазначений у цьому файлі. Як би ви цього досягли? Створити інший скрипт, який працює у фоновому режимі (на зразок демона) і перевіряє щосекунди, чи відповідає поточний час часу у файлі? Чи є інший спосіб? Машина є сервером Linux , Debian хрипить. Спасибі заздалегідь


4
Будь-яка причина, чому cron не буде працювати?
lreeder

12
Чому ця тема закрита ?? Це дуже обґрунтоване питання. Пошук у Google привів вас до цього як №1. І відповіді досить нерозумні. Тож хтось, хто може відповісти на це, зрозуміло, англійською буде заблокований
Річард де Рі

2
@Richard Я підозрюю, що StackOverflow закриває стільки питань, як це, щоб заохотити користувачів ставити запитання, що не стосуються теми, на відповідному сайті StackExchange. Є досить багато нових веб-сайтів, які раніше не існували. Наприклад, існує досить багато дуже корисних запитань про Vim щодо SO, які були закриті як поза темою, і тепер, коли існує Vi / Vim SE, ці питання будуть там по темі. Просто роздумуючи. Однак це все ще здається питанням програмування
mgarey

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послугу (за замовчуванням init / service system у різних дистрибутивах Linux, включаючи Ubuntu), послугу, з якою її можна запустити sudo systemctl start atdта включити автозапуск на init за допомогою sudo systemctl enable atd.
Маноель Вілела

8
У моєму випадку це негайно роздруковує "роботу 6 в 21.08.2017 10:53" ...
Jewenile

До речі, моя документація до Bash описує at -cвикористання. Для чого це, якщо спосіб виконання команди полягає у переведенні її в std?
Том Рассел,

Чи запуститься цей сценарій пізніше, якщо на той час систему було вимкнено?
shrijit

18

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

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

1
з bash, ви б написали$(< file)
glenn jackman

10

Cron підходить для чогось, що буде працювати періодично, наприклад кожної суботи о 4 ранку. Існує також анакрон , який працює навколо відключень електроенергії, сплячого режиму тощо. Як і в .

Але для одноразового рішення, для якого не потрібен root або щось інше, ви можете просто використовувати дату для обчислення секунд з епохи цільового часу, а також поточного часу, а потім використовувати expr, щоб знайти різницю, і спати стільки секунд.


10
Завдання atзалишатиметься запланованим, навіть якщо машина тим часом перезавантажена.
триплі

8

Зазвичай в Linux ви використовуєте crontabдля такого роду заплановані завдання. Але ви повинні вказати час, коли ви "налаштовуєте таймер" - тому, якщо ви хочете, щоб його можна було налаштувати у самому файлі, вам доведеться створити якийсь механізм для цього.

Але загалом, ви б використали, наприклад:

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

Виконував би сценарій щоп’ятниці о 1:30 (AM) тут:

30 становить хвилини

1 становить годину

наступні 2 * є day of monthі month(у такому порядку) і 5день тижня


2
так як би ви викликали цю команду?
Аарон Уллал,

1
Гуру Crontab ( crontab.guru ) є корисним інструментом для налаштування crontab.
Умеш. А
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.