Я хотел бы запланировать перезапуск моего Ubuntu каждые 30 минут. Есть ли какая-либо команда или графический способ сделать это?
Я хотел бы запланировать перезапуск моего Ubuntu каждые 30 минут. Есть ли какая-либо команда или графический способ сделать это?
Ответы:
Лучший способ сделать это будет зависеть от того, почему вы хотите, чтобы Ubuntu перезагружался каждые полчаса.
Поэтому я рекомендую отредактировать ваш вопрос, чтобы объяснить, почему вы хотите это сделать.
Предполагая, что люди могут использовать машину локально или удаленно, лучше избегать перезапуска Ubuntu из-под них без предупреждения. Поэтому вместо того, чтобы планировать reboot
команду, я рекомендую планировать shutdown
команду, чтобы она предупреждала пользователя.
Чтобы запланировать отключение каждые полчаса с предупреждением за 5 минут до этого, добавьте это в /etc/crontab
:
#minute hour mday month wday user command
*/30 * * * * root shutdown -r +5
Вам на самом деле не нужно добавлять первую строку, которая является комментарием. Я включил это для ясности - кое-что как это уже там.
-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 [
как выполняется сам тест.
Мне нравится делать это, говоря менеджеру сессии, что мы хотим перезагрузить компьютер. Это может быть сделано без прав root, и мы получаем хорошее окно, которое предупреждает нас о перезагрузке системы - даже если мы захотим, мы можем отменить перезагрузку.
Установите gnome-schedule
из Центра программного обеспечения Ubuntu. Если вы не хотите устанавливать что-либо дополнительное, сделайте это Terminal Terminal.
Откройте gnome-schedule
из тире, создайте новую повторную задачу и установите следующие параметры:
dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
Оставьте другие параметры в их значениях по умолчанию. Нажмите на Добавить .
Запустите из терминала:
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
.
Оба метода, описанные выше, зависят от некоторых компонентов гнома, найденных как на сеансах гнома, так и в Unity. Если вы хотите сделать это в других средах (таких как KDE Kubuntu, LXDE Kubuntu ...), лучше заменить команду на эту:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Это не будет запрашивать подтверждения и будет перезапущено немедленно, но будет работать во всех средах, если, конечно, вы не удалили ConsoleKit вручную.
Запустите sudo crontab -e
из командной строки и добавьте эту строку в файл:
0,30 * * * * reboot
Это говорит системе запускать команду reboot
каждые 30 минут как пользователь root. Обзор синтаксиса времени см. Здесь: http://linuxmoz.com/crontab-syntax-tutorial/
reboot
должно быть запущено как root
, и это добавляет его в личный crontab пользователя, поэтому он запускается от имени этого пользователя без полномочий root. (То же самое с sudo reboot
тоже не будет работать, потому sudo
что попытается запросить пароль и потерпит неудачу.) /etc/crontab
Вместо этого следует использовать для этого (обратите внимание, что его синтаксис немного отличается).
sudo crontab -e
а затем создать запись cron.
Используйте cron
для планирования работы каждые 30 минут. Направьте эту работу на сценарий оболочки, который просто имеет
reboot
в этом.
Поскольку cron
запускается с правами root, вам не нужно делать ничего особенного с точки зрения прав доступа.
Да, на самом деле я никогда ни в одной из своих систем не разрешал использовать пользовательские crontabs (есть более эффективные способы предоставления пользователям возможности выполнять запланированные задачи на уровне пользователя). Cron с самого начала создавался исключительно для автоматизации системы, а не для планирования пользователями обычных задач. задания. Такие вещи, как ротация бревен (что все еще происходит сегодня)
Перезагрузка ДОЛЖНА быть запущена от имени пользователя root, чтобы работать правильно, альтернатива - установить ее «липкий бит», чтобы при запуске от имени обычного пользователя она фактически выполнялась от имени пользователя root и работала как положено, но при этом вы открываете свой сервер до разрешения обычного пользователи могут перезагрузить его по своему желанию.
Вы могли бы даже автоматизировать вызов в SUDO, но мне нужно разобраться с этим, не уверен, сможете ли вы автоматизировать необходимость пароля с помощью SUDO (я не часто его использую, я предпочитаю просто перейти прямо в корень оболочка с помощью SU)
Если вы установите его в crontab всей системы, тогда все будет выполнено с правами root, поэтому мое утверждение верно (я просто не упомянул, что следует использовать общесистемную версию)
Что касается вашего вопроса "Зачем оборачивать это в сценарий?" а почему бы не? Если OP помещает его в сценарий оболочки, то в какой-то момент в будущем необходимо добавить к нему, он просто добавляет в сценарий, вместо того, чтобы открывать crontab, найти задание, удалить его, заменить его сценарием оболочки, затем напишите скрипт со старым + новым в.
Более 20 лет в качестве системного администратора / разработчика, работающего с системами еще в Ultrix / Solaris и даже в VAX, научил меня одному главному.
Если вы можете сделать это легче в начале, тогда это будет легко для жизни.
Я действительно не понимаю такого «минималистичного» подхода, который есть у многих современных системных администраторов, когда делать как можно меньше - ключ к успеху. Большинство серверов в наши дни легко в 20 раз + более мощные, чем все, что я когда-либо начинал, и такой сценарий (перенос в сценарии оболочки) был тогда рекомендуемой практикой, поэтому на самом деле нет никаких оснований не делать этого сейчас.
Если вы действительно не хотите использовать хардкорный Unix / Linux, в этом случае пометьте все это в записи cron и направьте все вместе так, как это должно быть сделано :-)
Тем не менее, я делаю отступление, а также понимаю, что многие ребята в эти дни вбрасываются в глубокий конец и говорят, чтобы заставить вещи работать, поэтому у них не хватает времени (и, как правило, склонности), чтобы сесть и узнать о новых методах (или старый в этом случае) или даже хотите поиграть с этим материалом вне работы.
Лично у меня есть один сервер из тех, которые я запускаю, который предназначен исключительно для меня, чтобы я мог на нем поиграть, поэтому я могу тестировать подобные вещи ... который лучше А или В, так что не случайно я советую по любому из это.