Как перезапускать каждые 30 минут автоматически?

14

Я хотел бы запланировать перезапуск моего Ubuntu каждые 30 минут. Есть ли какая-либо команда или графический способ сделать это?

user123498
источник
12
Мне просто любопытно: что может быть целью перезапуска каждые 30 минут?
Rafał Cieślak

Ответы:

30

Лучший способ сделать это будет зависеть от того, почему вы хотите, чтобы Ubuntu перезагружался каждые полчаса.

Поэтому я рекомендую отредактировать ваш вопрос, чтобы объяснить, почему вы хотите это сделать.

Перезагрузка каждые 30 минут и предупреждение пользователей перед каждой перезагрузкой:

Предполагая, что люди могут использовать машину локально или удаленно, лучше избегать перезапуска Ubuntu из-под них без предупреждения. Поэтому вместо того, чтобы планировать rebootкоманду, я рекомендую планировать shutdownкоманду, чтобы она предупреждала пользователя.

Чтобы запланировать отключение каждые полчаса с предупреждением за 5 минут до этого, добавьте это в /etc/crontab:

#minute hour    mday    month   wday    user    command
*/30    *       *       *       *       root    shutdown -r +5

Вам на самом деле не нужно добавлять первую строку, которая является комментарием. Я включил это для ясности - кое-что как это уже там.

  • Это запланирует отключение системы для reboot ( -r) через пять минут после ( +5) выполнения команды. Он запускается каждые полчаса ( */30). Смотрите man cronи man 5 crontab.
  • Измените +5на что-то другое, чтобы изменить время, которое пользователи получают после предупреждения о перезагрузках.
  • 0,30под минуту также будет работать, если вы предпочитаете это. (Точно так же, если бы это было каждые 20 минут, вы могли бы написать */20или 0,20,40.)
  • Убедитесь, что /sbinв PATHпеременной, указанной в верхней части /etc/crontab. В противном случае shutdown(под command) придется вызывать как /sbin/shutdown.

Команда всегда будет выполняться на получасовой отметке, если в это время машина работает и работает . Это приведет к объявлению отключений каждые полчаса и выполнению через 5 и 35 минут после часа.

  • Одним из преимуществ здесь является то, что администратор может отменить только что объявленное отключение с помощью sudo shutdown -c.
  • Если компьютер не работает в течение определенного времени, когда запланированная команда должна быть запущена, он не запустится. Если это не соответствует вашим потребностям, вам придется планировать перезагрузки по-другому. (Это не относится к использованию, shutdownно будет применяться в равной степени, если вы планируете reboot.) В этом случае, пожалуйста, измените свой вопрос, чтобы объяснить ваши конкретные потребности. (Я бы порекомендовал anacronдля этого, но ваши временные интервалы слишком короткие.)

Чтобы администраторам было проще предотвратить автоматическую перезагрузку:

Возможно, вы захотите настроить это так, чтобы администратору было легко приостановить все автоматически запланированные перезагрузки:

#minute hour    mday    month   wday    user    command
*/30    *       *       *       *       root    [ -e /etc/noautoreboot ] || shutdown -r +5

Это запланирует перезагрузки таким же образом - каждые полчаса с предупреждением о пяти минутах - за исключением того, что это не запланирует перезагрузку, если файл с именем noautorebootсуществует в /etc.

  • Этот контрольный файл может быть создан администратором с помощью:

    sudo touch /etc/noautoreboot
    
  • Его можно удалить с помощью:

    sudo rm /etc/noautoreboot
    
  • Обратите внимание, что имеет значение, существует ли файл , а не то, что он содержит.

  • Если перезагрузка запланирована и пользователи предупреждены, тогда файл создан, (немедленная перезагрузка) все равно произойдет.

  • Как это работает? Он использует оценку короткого замыкания или operator ( ||) в качестве сокращения для:

    Если /etc/noautoreboot не существует, бегите shutdown -r +5.

    Этот ответ объясняет , как короткое замыкание и и или операторы могут выполнять if- thenлогику. Для краткого, интуитивного и очень неформального объяснения вы можете прочитать команду следующим образом:

    /etc/noautorebootсуществуют! Или беги shutdown -r +5.

    Посмотрите, man [как выполняется сам тест.

Элия ​​Каган
источник
12

Мне нравится делать это, говоря менеджеру сессии, что мы хотим перезагрузить компьютер. Это может быть сделано без прав root, и мы получаем хорошее окно, которое предупреждает нас о перезагрузке системы - даже если мы захотим, мы можем отменить перезагрузку.

Графический путь - предпочтительный метод

Установите gnome-scheduleиз Центра программного обеспечения Ubuntu. Если вы не хотите устанавливать что-либо дополнительное, сделайте это Terminal Terminal.

Откройте gnome-scheduleиз тире, создайте новую повторную задачу и установите следующие параметры:

  • Описание: все, что вы хотите
  • Команда: dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
  • Выберите X Application чуть ниже команды.
  • Время и дата, Дополнительно:
    • Минута: 0,30

Оставьте другие параметры в их значениях по умолчанию. Нажмите на Добавить .


The Terminal Way - Нет необходимости в дополнительном программном обеспечении

Запустите из терминала:

crontab -e

Добавьте эту строку:

0,30 * * * * DISPLAY=:0 dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot

Сохранить и выйти. Предполагая, что вы используете nano(по умолчанию), нажмите Ctrl + o и Ctrl + x .

Обратите внимание, что это не будет работать, если ваш DISPLAY на самом деле отличается от :0, и именно поэтому этот метод не является предпочтительным. Но, если честно, если вы перезагружаете компьютер каждые 30 минут, ваш DISPLAY, скорее всего, будет всегда :0.

Не используете Gnome или Unity?

Оба метода, описанные выше, зависят от некоторых компонентов гнома, найденных как на сеансах гнома, так и в Unity. Если вы хотите сделать это в других средах (таких как KDE Kubuntu, LXDE Kubuntu ...), лучше заменить команду на эту:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

Это не будет запрашивать подтверждения и будет перезапущено немедленно, но будет работать во всех средах, если, конечно, вы не удалили ConsoleKit вручную.

Хорхе Суарес де Лис
источник
6

Запустите sudo crontab -eиз командной строки и добавьте эту строку в файл:

0,30 * * * * reboot

Это говорит системе запускать команду rebootкаждые 30 минут как пользователь root. Обзор синтаксиса времени см. Здесь: http://linuxmoz.com/crontab-syntax-tutorial/

Кевин Чен
источник
3
Это не будет работать, так как rebootдолжно быть запущено как root, и это добавляет его в личный crontab пользователя, поэтому он запускается от имени этого пользователя без полномочий root. (То же самое с sudo rebootтоже не будет работать, потому sudoчто попытается запросить пароль и потерпит неудачу.) /etc/crontabВместо этого следует использовать для этого (обратите внимание, что его синтаксис немного отличается).
Элия ​​Каган
1
Вы можете выдать, sudo crontab -eа затем создать запись cron.
ТАСС
-3

Используйте cronдля планирования работы каждые 30 минут. Направьте эту работу на сценарий оболочки, который просто имеет

reboot

в этом.

Поскольку cronзапускается с правами root, вам не нужно делать ничего особенного с точки зрения прав доступа.

Обновить

Да, на самом деле я никогда ни в одной из своих систем не разрешал использовать пользовательские crontabs (есть более эффективные способы предоставления пользователям возможности выполнять запланированные задачи на уровне пользователя). Cron с самого начала создавался исключительно для автоматизации системы, а не для планирования пользователями обычных задач. задания. Такие вещи, как ротация бревен (что все еще происходит сегодня)

Перезагрузка ДОЛЖНА быть запущена от имени пользователя root, чтобы работать правильно, альтернатива - установить ее «липкий бит», чтобы при запуске от имени обычного пользователя она фактически выполнялась от имени пользователя root и работала как положено, но при этом вы открываете свой сервер до разрешения обычного пользователи могут перезагрузить его по своему желанию.

Вы могли бы даже автоматизировать вызов в SUDO, но мне нужно разобраться с этим, не уверен, сможете ли вы автоматизировать необходимость пароля с помощью SUDO (я не часто его использую, я предпочитаю просто перейти прямо в корень оболочка с помощью SU)

Если вы установите его в crontab всей системы, тогда все будет выполнено с правами root, поэтому мое утверждение верно (я просто не упомянул, что следует использовать общесистемную версию)

Что касается вашего вопроса "Зачем оборачивать это в сценарий?" а почему бы не? Если OP помещает его в сценарий оболочки, то в какой-то момент в будущем необходимо добавить к нему, он просто добавляет в сценарий, вместо того, чтобы открывать crontab, найти задание, удалить его, заменить его сценарием оболочки, затем напишите скрипт со старым + новым в.

Более 20 лет в качестве системного администратора / разработчика, работающего с системами еще в Ultrix / Solaris и даже в VAX, научил меня одному главному.

Если вы можете сделать это легче в начале, тогда это будет легко для жизни.

Я действительно не понимаю такого «минималистичного» подхода, который есть у многих современных системных администраторов, когда делать как можно меньше - ключ к успеху. Большинство серверов в наши дни легко в 20 раз + более мощные, чем все, что я когда-либо начинал, и такой сценарий (перенос в сценарии оболочки) был тогда рекомендуемой практикой, поэтому на самом деле нет никаких оснований не делать этого сейчас.

Если вы действительно не хотите использовать хардкорный Unix / Linux, в этом случае пометьте все это в записи cron и направьте все вместе так, как это должно быть сделано :-)

Тем не менее, я делаю отступление, а также понимаю, что многие ребята в эти дни вбрасываются в глубокий конец и говорят, чтобы заставить вещи работать, поэтому у них не хватает времени (и, как правило, склонности), чтобы сесть и узнать о новых методах (или старый в этом случае) или даже хотите поиграть с этим материалом вне работы.

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

Shawty
источник
Смотрите мое обновление .. вы можете дать мне 1 балл назад, если хотите ;-)
shawty
Попробуйте еще раз ...
наберитесь
2
Теперь это уже не ответ! (Кроме того, вы путаете липкий бит и бит setuid .)
Элия ​​Каган
Да, это ответ, я набрал его, добавил как ответ, поэтому это ответ !!!
Shawty