Какой простой способ запустить команду, скажем, через 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? Почему это "неправильно"?