Удобно запланировать выполнение команды на более поздний срок?

Каков простой способ запустить команду, скажем, через 8 часов? Я могу думать об этом так:

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

Есть ли более "правильный" способ?

Вы можете использовать at команда. То at выполняйте команды позже. То at утилита должна считывать команды из стандартного ввода и группировать их вместе как на рабочем месте, чтобы быть выполненными позже.

Обычно, at устанавливается по умолчанию в Ubuntu, но если ваша версия не включает его, установите через:

sudo apt-get install at

Для получения дополнительной информации, опций, примеров и других сведений см. справочную страницу в man 1 at.

Пример определения относительного времени (обратите внимание на интервал между + и продолжительность):

at now + 8 hours -f ~/myscript.sh

Вы также можете использовать удобные сокращения, например tomorrow или noon, как в

echo "tweet fore" | at teatime 

Примечание: Это приведет к запуску команды слева от канала немедленно - и его выходные данные (которые передаются по каналу на at) будет управляться at в назначенное время. Итак, приведенная выше команда планирует tweet fore будет запущен во время чаепития.

В примере также показано, как вы можете передавать действия в at. at -c это способ, которым вы можете просматривать запланированные действия, которые вы можете удобно перечислить с указанием их количества, как с:

at -c 3

Да, вы можете установить задание cron.

Например, если сейчас время 14:39:00, а сегодня пятница, 30 августа, вы можете добавить следующее задание cron (которое будет выполнено через 8 часов) в свой файл crontab, используя crontab -e команда:

39 22 30 8 5  /path/to/mycommand.sh

Подробнее о:

Используйте графический интерфейс на основе Gnome для cron, at, и тому подобное:

Введение в КронХоуто предлагает использовать gnome-schedule графический интерфейс, который намного приятнее, чем вводить весь мусор в терминал (особенно для "обычных" пользователей Ubuntu, которые не являются "опытными" пользователями * nix / bsd.)

Запустите его с помощью Unity Dash (или другого меню приложений), чтобы найти Запланированные задачи или бегать gnome-schedule.

>В системах Ubuntu на базе Gnome Gnome Scheduled tasks tool (из пакета gnome-schedule) в Applications -- System Tools предоставляет графический интерфейс с запросом на использование Cron. Веб-сайт проекта находится по адресу http://gnome-schedule.sourceforge.net/; программное обеспечение можно установить из Центра программного обеспечения или набрав

sudo apt-get install gnome-schedule

в терминале.

С помощью gnome-schedule, для скрипта в вашем домашнем каталоге новая команда "at" будет настроена с использованием этого типа окна:

enter image description here

Проверьте выходные данные date в петле. Это быстрый и грязный способ сделать это, например, если вы не можете использовать at, cron, или другие инструменты.

Допустим, вы хотите, чтобы ваш сценарий запускался в полдень:

until [[ $(date +%H:%M) == 12:00 ]]; do    sleep 30done./mycommand.sh

Скажите, что вы хотите, чтобы он запустился завтра в полдень (для меня сегодня 24 ноября).:

until [[ $(date +%d_%H:%M) == "25_12:00" ]]; do     sleep 30done./mycommand.sh

Ранее в этом ответе рекомендовалось регулярное выражение, в котором есть некоторые подводные камни, например, много специальных символов. Кроме того, рекомендуется сопоставлять со всей строкой даты, что более подвержено ошибкам, поскольку зависит от локали. Например, я использую некоторые форматы французской локали, так как живу в Квебеке, поэтому, если я забуду об этом и напишу until [[ $(date) == "25 12:00" ]], он никогда не будет совпадать, потому что французский порядок - это "день, месяц, год, время" вместо английского "месяц, день, время года".

Если вы используете bash на Mac, вы столкнетесь с некоторыми трудностями при использовании at программа. В этом случае вы можете улучшить свое первоначальное предложенное решение,

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

с этим,

nohup bash -c "sleep $(echo '8 * 60 * 60' | bc) ; ./mycommand.sh" &

это более понятная форма того, как долго вы хотите ждать. В этом примере 8 это количество часов, которое вы хотите подождать, прежде чем запускать свой скрипт mycommand.sh.

Для того, чтобы установить gnome-schedule в Ubuntu 21.04 вы можете сделать

$ sudo snap install gnome-schedule --edge --jailmode

Что-то не так с nohup + sleep? Почему это “неприлично”?