Який простий спосіб запустити команду, скажімо, через 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 Manpage Repository
Приклад:
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це о 16:00. Чомусь це не згадується в 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поки ви її не видалите. Через рік, коли ви забули, хто його туди поставив і чому, вам залишиться чесати голову, цікавлячись, що робити з командою.
Використовуйте GUI на основі Gnome для cron, atтощо:
Введення CronHowto пропонує використовувати gnome-schedulegui, що набагато приємніше, ніж вводити весь сміття в термінал (особливо для "середніх" користувачів Ubuntu, які не є "power" * nix / bsd користувачами.)
Запустіть його, скориставшись Unity Dash (або меню інших програм) для пошуку запланованих завдань або запуску gnome-schedule.
У системах Ubuntu на базі Gnome інструмент "Заплановані завдання Gnome" (з пакету gnome-графік) у програмах Програми -> Системні інструменти забезпечує графічний інтерфейс із запитом на використання 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? Чому це "неправильно"?