Недавно знакомый обратился с проблемой — один из его серверов на Debian периодически подвисает, причем так, что через ssh не зайти до осуществления перезагрузки. В логах ничего интересного нет, как по мне — проблема может иметь вовсе аппаратный характер происхождения. Но допытываться в чем именно дело он не захотел, а просто попросил настроить автоматическую перезагрузку сервера каждый день, мотивируя, что раз перезагрузка помогает, то почему бы этот костыль не засунуть в автозапуск. И, пусть я считаю это не совсем корректным, помочь с автоматической перезагрузкой мне не сложно.

Для автоматизации перезагрузки мы будем использовать cron — службу, которая запускается вместе с Debian и работает в фоне. Основная задача cron — запуск определенных действий по расписанию. Подробно говорить про cron сейчас смысла нет, информация про него расписана буквально тысячу раз (кому интересно, может прочитать тематический пост на хабре), сейчас сосредоточимся на непосредственно задаче.

В первую очередь переходим в учетную запись суперпользователя root (чуть ниже я объясню зачем):

su

Вводим пароль суперпользователя, подтверждаем, после чего пишем следующее:

crontab -e

В текстовом редакторе по умолчанию (в моем случае это nano) будет открыт файл с правилами cron. Вернее, не совсем так — будет открыт временный файл (копия правил), изменения в котором после завершения редактирования добавятся в /var/spool/cron/crontabs/username — соответственно, указанные операции будут выполняться от имени пользователя username (с соответствующими правами). Поэтому следует понимать, что если предполагается выполнение операций с уровнем привилегий суперпользователя root, то и запускать редактирование правил cron нужно от имени соответствующего суперпользователя root — это как раз наш случай, ведь речь идет об осуществлении перезагрузки. Нажатием на клавишу Page Down переходим сразу в конец файла и пишем новое правило.

Общий синтаксис правил cron следующий:

{минута} {час} {день} {месяц} {день недели} /путь/к/исполняемому/файлу

Для перезагрузки, скажем, каждый день в 5:00 строка примет следующий вид:

0 5 * * * /sbin/reboot

Записываем изменения в файл и выходим из текстового редактора. Если все сделано правильно, то каждый день в 5:00 сервер будет перезагружаться.