Как настроить Ubuntu на перезагрузку каждый день в указанное время?

11

Используя терминал или bash-файл, как я могу настроить Ubuntu для перезагрузки каждый день в (например, в 3 часа ночи)?

Другими словами, я хочу запланировать автоматическую перезагрузку через терминал.

Я не смог найти ничего связанного с этим в Google или AskUbuntu, и я довольно новичок в Ubuntu в целом (только что получил мой новый Raspberry Pi).

Матиас Ликкегор Лоренцен
источник

Ответы:

13

Отредактируйте записи в crontab с помощью crontab -eкоманды (по умолчанию это отредактирует текущий зарегистрированный пользователь crontab) и добавьте следующую строку:

0 3 * * * echo $PASSWD | sudo -S reboot
#change $PASSWD with your password

Сохраните файл и проверьте новую запись crontab с помощью crontab -l.

Если вы хотите использовать только:

0 3 * * * sudo reboot

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

Или просто добавьте crontab в файл crontab пользователя root, предложив полный путь к rebootкоманде, используя sudo crontab -e:

0 3 * * * /sbin/reboot
Раду Рэдяну
источник
Не могли бы вы положить это в crontab root и не слишком беспокоиться оecho $PASSWD
Дан
Я этого не знал. Это ошибка cron или это нормально? Я имею в виду, если вы отредактируете crontab как root, то задание будет выполнено, только если вы вошли в систему как root? Я думаю, что это неправильно. (или должно быть).
NickTux
@ RaduRădeanu Это не правда. Root cronjobs будет работать без входа в систему как root.
OrangeTux,
@OrangeTux Вы имеете право, извините, я сказал это, потому что я тестировал без указания полного пути для rebootкоманды. В противном случае не будет работать. Смотрите мои новые правки.
Раду Рэдяну
@NikTh Я был неправ, см. Выше комментарий .
Раду Рэдяну
1

Обратите внимание, что помещать ваш текстовый пароль в текстовый файл не очень хорошая идея, поэтому лучше всего запускать это задание с правами root с самого начала. Обычно вместо того, чтобы редактировать crontab root с помощью crontabкоманды, которая оставляет записи в /var/spool/cron/crontabsнесколько загадочном месте, я предпочитаю вводить их явно в /etc/cron.d. Записи в cron.d запускаются как системные записи crontab, обрабатываются как файлы конфигурации, поэтому они должны выдерживать перезагрузки системы, обновления и обновления, и вы можете явно указать работающего пользователя:

echo "0 3 * * * root /sbin/shutdown -h 5 'System will reboot in 5 minutes'" | sudo tee /etc/cron.d/reboot-at-3-am

Если вам не нужно определенное время, а просто хотите, чтобы система перезагружалась один раз в день, добавьте исполняемый файл или скрипт, /etc/cron.dailyи он будет автоматически запускаться в заданное время (системное время 6:25 по умолчанию):

echo "/sbin/shutdown -h 5 'System will reboot in 5 minutes'" | sudo tee /etc/cron.daily/reboot-me

Обратите внимание, что вместо того, чтобы просто перезагрузить систему без предупреждения, я устанавливаю 5-минутное предупреждение, поэтому, если кто-то вошел в систему, у него есть шанс сохранить свою работу или даже прервать выключение sudo shutdown -c, вместо того, чтобы вытащить систему прочь из-под них. Вы можете настроить их соответствующим образом, если вы хотите дать более подробное предупреждение (например, используйте shutdown -h 60и выполните команду в 2:00 AM, и вы будете предупреждать пользователей за 1 час).

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

roadmr
источник
-1

Почему вы хотите - или должны это сделать? Хотя сделать это довольно просто, почти наверняка есть лучшее решение для Linux, которое не требует перезагрузки. В отличие от Windows, ОС на базе Linux не требуют перезагрузок практически для всего, кроме обновления ядра.

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

Джек Найт
источник
3
Он хочет перезагрузить компьютер каждую ночь, чтобы он перезагрузился
Майкл Батлер