Какой простой способ запустить команду, скажем, через 8 часов? Я могу думать об этом так:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Есть ли более "правильный" способ?
Какой простой способ запустить команду, скажем, через 8 часов? Я могу думать об этом так:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Есть ли более "правильный" способ?
Ответы:
Вы можете использовать at
команду. at
Выполнять команды на более позднее время. at
Утилиты следует читать команды со стандартного ввода и сгруппировать их вместе , как на рабочем месте, должны быть выполнены в более позднее время.
Обычно at
устанавливается по умолчанию в Ubuntu, но если ваш выпуск не включает его, установите через:
sudo apt-get install at
Для получения дополнительной информации, опций, примеров и прочего смотрите репозиторий справочной системы Ubuntu
Пример:
at now +8 hours -f ~/myscript.sh
Вы также можете использовать удобные сокращения, как tomorrow
или noon
, как в
echo "tweet fore" | at teatime
Предупреждение: Это немедленно запустит команду слева от канала,но только представит ее результат позже. Пример также демонстрирует, как вы можете направить действия вat
. at -c
это способ проверки запланированных действий, который можно удобно перечислить по их номеру, например:
at -c 3
at now +8 hours -f ~/myscript.sh
at 8:00
нужно запускать команду в абсолютное время, а batch
для «когда похоже, что компьютер бездействует»
teatime
это в 4 часа дня. По некоторым причинам это не упомянуто в manpages.ubuntu.com/manpages/raring/man1/at.1posix.html, но это man at
здесь и здесь manpages.ubuntu.com/manpages/raring/en/man1/at.1.html .
gpio write 8 1
но он сразу же был выполнен.
Да, вы можете установить работу cron.
Например, если сейчас время 14:39:00, а сегодня пятница, 30 августа, вы можете добавить следующее задание cron (которое будет выполнено через 8 часов) в ваш файл crontab с помощью crontab -e
команды:
39 22 30 8 5 /path/to/mycommand.sh
Больше о:
crontab
пока вы не удалите ее. Год спустя, когда вы забыли, кто его там и почему, вам придется почесать голову, размышляя, что делать с командой.
Используйте графический интерфейс Gnome основы для cron
, at
и тому подобное:
Введение CronHowto предлагает использовать графический интерфейсgnome-schedule
, который намного приятнее, чем вводить весь мусор в терминал (особенно для «средних» пользователей Ubuntu, которые не являются «опытными» * nix / bsd пользователями.)
Запустите его, используя Unity Dash (или меню других приложений) для поиска запланированных задач или выполнения gnome-schedule
.
В системах Ubuntu на основе Gnome инструмент «Назначенные задачи Gnome» (из пакета gnome-schedule) в меню «Приложения» -> «Системные инструменты» предоставляет графический интерфейс с подсказками для использования Cron. Веб-сайт проекта находится по адресу http://gnome-schedule.sourceforge.net/ ; программное обеспечение можно установить из Центра программного обеспечения или набрав
sudo apt-get install gnome-schedule
в терминале.
Используя gnome-schedule
, для скрипта в вашем домашнем каталоге, новая команда "at" будет настроена с использованием этого типа окна:
Я разобрался с быстрым и грязным способом сделать это, прежде чем я обнаружил, что at
это вещь.
Скажем, вы хотите, чтобы ваш скрипт запускался в полдень:
until [[ "$(date)" =~ "12:00:" ]]; do
sleep 10
done
./mycommand.sh
Скажем, вы хотите, чтобы он запускался завтра в полдень (сегодня для меня 24 ноября):
until [[ "$(date)" =~ "25 12:00:" ]]; do
sleep 30
done
./mycommand.sh
Обновление : Немного лучший метод: проверяйте только те числа, которые вас интересуют, используя date +FORMAT
:
until [[ $(date +%H:%M) == 21:06 ]]; do
...
at
, cron
или любое другое приложение реальный планировщика. Планирование задач сложное, и вам не нужно изобретать велосипед.
at
.
at
, потому что его рабочие места переживут перезагрузку.
nohup
+sleep
? Почему это "неправильно"?