Який простий спосіб запустити команду, скажімо, через 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-schedule
gui, що набагато приємніше, ніж вводити весь сміття в термінал (особливо для "середніх" користувачів 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
? Чому це "неправильно"?