Как я могу запланировать перезагрузку в Linux?

38

Я новичок в Linux и хочу запланировать перезагрузку в полночь. как мне это сделать?

Редактирование:

  • Извините, я не поставил полную информацию. Я хочу перезагрузить каждую третью субботу месяца в 23:30.

  • Я не знаю, что не так, но я не могу найти crontab. Что у меня есть cron.d; cron.daily; cron.weekly; cron.monthly;

Я извиняюсь за вопрос нуба. Пожалуйста, помогите мне. Спасибо.

klauriens
источник
2
Реальный вопрос в том, почему вы хотите делать это регулярно, у вас есть утечка приложений или что-то? Если вы планируете регулярные перезагрузки, чтобы решить проблему, то у вас, вероятно, есть большая проблема ...
JamesHannah
1
Вы хотите, чтобы он перезагружался каждую ночь?
Мэтт Симмонс
4
Я не отказываюсь, потому что это своего рода политическое решение (и я думаю, что ночные перезагрузки немного чрезмерны), но регулярное планирование перезагрузок в инфраструктуре - это достойный способ убедиться, что на машинах установлены обновленные ядра и все службы. залатаны. Я слышал, что трехмесячный срок безотказной работы был хорошим промежуточным звеном.
Мэтт Симмонс
Если бы это был комментарий к вопросу, а не ответ, я бы его высказал. На самом деле я бы передумал, потому что вопрос был неоднозначным о том, было ли это разовым или регулярным делом. :)
интуитивно
3
/etc/crontabзапись like 30 23 15-21 * 6 /sbin/shutdown -r nowбудет перезагружаться в 23:30 в 3-ю субботу каждого месяца.
Крис С

Ответы:

45

Типа shutdown -r 0:00и он перезагрузится в полночь.

Если вы хотите перезагружаться каждую ночь, добавьте запись cron, используя crontab -e в качестве пользователя root, чтобы запускать shutdown -r каждую полночь

@midnight shutdown -r now
радиус
источник
3
Аргумент времени является обязательным, вы можете использовать now.
Тобу
Нет ... если он хочет однократную команду и хочет набрать команду сейчас, он должен добавить время!
радиус
3
@ Нет, ему нужен аргумент времени, например, nowв строке crontab.
Приостановлено до дальнейшего уведомления.
Да, извините, я неправильно прочитал комментарий Тобу и думаю, что он говорит, что 0:00 было бесполезно в первой команде ... Я отредактировал, чтобы исправить (и ответы Массимо тоже)
радиус
Мне было бы интересно узнать, какие другие @{command}переменные доступны.
Грег
16

Использование crontab.

http://en.wikipedia.org/wiki/Crontab

Добавление этой записи в / etc / crontab должно сделать:

0 0 * * * /sbin/shutdown -r now
Massimo
источник
3
shutdownнужен аргумент времени, такой какnow
Приостановлено до дальнейшего уведомления.
1
Это будет делать перезагрузку каждую ночь. Я не уверен, хочет ли он этого.
cstamas
1
Исходный вопрос звучал так, будто он хотел, чтобы он перезагружался каждую ночь. Он на самом деле хочет, чтобы он перезагружался каждую 3-ю субботу, что было бы проще всего с crontab
Chris S
я не знаю, что случилось, но я не могу найти crontab ..? у меня есть cron.d; cron.daily; cron.weekly; cron.monthly; Я прошу прощения за вопрос нуб. Пожалуйста, помогите мне. спасибо
klauriens
Это зависит от используемого вами дистрибутива, но обычно вы должны найти файл с именем «crontab» в каталоге / etc вашей системы. Вы также можете просмотреть текущий crontab с помощью команды "crontab -l" и отредактировать его с помощью "crontab -e".
Массимо
13

Другой вариант - команда at , доступная во многих дистрибутивах Linux. Смотрите man-страницу для получения дополнительной информации, но общий синтаксис для вашей цели:

эхо "перезагрузка" | в 00:00 27 июня

Цитировать справочную страницу OS X:

at - выполняет команды в указанное время

Звучит так, как мы говорим. ;)

Зейн С Халсолл
источник
1

Насколько я знаю, вы не можете использовать cron для планирования задач на «последнюю пятницу каждого месяца» или «третий четверг каждого месяца». Что вы можете сделать, каким бы уродливым это ни казалось, - запускать каждую субботу в 23:30 сценарий, а затем этот сценарий определять, является ли данная суббота третьей субботой недели (это можно сделать с помощью команд date и, возможно, cal). ,

Надеюсь, это поможет. Я не нашел изящного решения этой проблемы. Я нашел эту ветку, потому что искал решение той же проблемы.

ervingsb
источник
1
комментарии выше «30 23 15-21 * 6 / sbin / shutdown -r сейчас» будут работать. В основном он будет работать только на третьей неделе месяца, но только тогда, когда это также суббота
Sirex
Я не думаю, что эта линия cron работает так, как вы думаете.
ervingsb
Я создал следующие две строки: «30 23 1-7 * 3 date» и «30 23 1-7 * 3 date». Вчера вечером я получил два письма, в которых говорилось: «Ср. 7 марта 23:30:02 CET 2012»
ervingsb
последнее поле соответствует дню недели, а ноль - воскресенье. 4 cronjob не должны были совпадать в среду.
Sirex
Это то, что я имел в виду. Правило, которое вы написали, не означает, что вы думаете, что это значит. Это будет запускать работу каждый день в течение недели. Независимо от дня недели.
ervingsb
0

1) в командной строке введите 2) как только вы узнаете, где находится перезагрузка (обычно / sbin / reboot), перейдите в один из каталогов в /etc/cron.daily, /etc/cron.weekly, / etc / cron. почасово и т. д.which reboot
cd /etc/cron.weekly

3) создайте файл (используя nano или vim), назовите его zzreboot и добавьте следующие строки:

#! / bin / sh
/ sbin / reboot

Причина, по которой вы хотите назвать файл zz, заключается в том, чтобы убедиться, что это последнее задание, вызванное после всех остальных заданий. Чтобы убедиться, что просто сделайте ls -lв каталоге и убедитесь, что это последний файл.

Шон Бахтияр
источник