UPD: приведенный ниже скрипт превратился в целую систему автообновлений с блокировкой выключения во время обновления: system-autoupdate
Замучился постоянно устанавливать обновления на сервер с Ubuntu, unnatended-upgrades не хочу конфигурировать, да и делает он не совсем то, что нужно, поэтому сделал автообновление системы скриптом. Его код ниже. Что делает скрипт, прописано в коде комментариями.
sudo nano /usr/local/bin/system-update
Вставляем код скрипта (можно вместе с комментариями просто скопировать):
#!/bin/bash # источник скрипта: https://nixtux.ru/520 # в случае, если придыдущая операция с пакетами не была доделана, доделаем ее, иначе эта команда просто ничего не сделает4 при недоделанных операциях с пакетами другие команды откажутся работать и будут предлагать запустить эту (например, сервер перезагрузился во время установки пакетов) dpkg --configure -a # обновляем кеш репозиториев apt update # на всякий случай принудительно завершаем все операции записи на диск, то есть записываем те данные, которые пока еще находятся в оперативной памяти sync # устанавливаем все обновления apt dist-upgrade -y sync # перезапустим основные сервисы, работающие на сервере # если что-то из них обновляется, то оно и так должно перезапускаться, но мне простой веб-сервера в пару секунд на перезапуск не страшен, а вот оперативная память не плохо так очищается, если ее кто-то скушал systemctl restart apache2 mysql nginx exim4 dovecot fail2ban sync # удаляем пакеты-сироты apt autoremove -y sync # Рассвопливаем систему: # выключаем своп, тем самым принудительно переносим в оперативную память из свопа все, что в нем находилось (а память мы уже расчистили перезапуком ее основных потребителей) swapoff -a # включаем своп заново swapon -a # у меня на сервере используется zram, swapoff -a его тоже включил, а swapon -a не включил, поэтому включим его заново systemctl restart zram-config
Делаем скрипт исполняемым:
sudo chmod +x /usr/local/bin/system-update
В крон (sudo crontab -e
) пишем:
30 6 * * * /usr/local/bin/system-update
Тогда скрипт автообновления системы будет запускаться каждый день в 6 часов 30 минут.
P.S. Про zram читайте в моей статье на Хабре «Нехватка оперативной памяти в Linux на рабочем ПК: оптимизация и действия при зависании»
Будет ли работать на Ubuntu 20.04 d в таком виде?
#!/bin/bash
# источник скрипта: https://nixtux.ru/520
# обновляем кеш репозиториев
apt update
# на всякий случай принудительно завершаем все операции записи на диск, то есть записываем те данные, которые пока еще находятся в оперативной памяти
sync
# устанавливаем все обновления
apt dist-upgrade -y
sync
# удаляем пакеты-сироты
apt autoremove -y
sync
reboot
Будет, но без dpkg —configure -a будет работать только до первой ошибки или внезапного прерывания работы apt dist-upgrade.