Первый раз crontab. Насколько это возможно?

Я новичок в Ubuntu и Linux в целом. После некоторого исследования я нашел отличную информацию о crontab. Я попытался "кодировать" сам, и вот что я придумал:

00 02 * * 1,3,5     sudo shutdown -r
@midnight           sudo apt-get update && sleep 60 && apt-get upgrade -y
@reboot             sleep 60 && sudo netplan apply && sleep 15 && sudo omd start website

Готов поспорить, вы знаете, чего я пытаюсь достичь, но поскольку я не могу попробовать, мне любопытно, будут ли эти команды работать так. Крайне важно, чтобы и сеть, и веб-сайт были в рабочем состоянии после перезагрузки. Кроме того, жизнеспособна ли часть 1,3,5 ? Будет ли это перезагружать машину в Пн, Ср и Пт? И было бы хорошо / разумно запланировать перезапуск после обновления / обновления?

Спасибо за помощь.

3
задан 19 August 2021 в 12:20

3 ответа

Я согласен со всем в других ответах, но позвольте мне добавить это. ..

Запускать apt-get без присмотра опасно. Некоторые приложения задают вопросы во время обновлений и обновлений, а некоторым другим требуется ввод с клавиатуры, если вы поместите их в фоновый режим, и они будут зависать, даже если ввод с клавиатуры не требуется.

Попытка запустить apt-get в фоновом режиме подобным образом - хороший способ получить систему, в которой обновления не работают, и их нужно настраивать и возобновлять вручную.

Процесс автоматического обновления предполагает автоматическую установку критических обновлений без вмешательства пользователя.

Если ваша машина дает сбой, вам нужно выяснить причину. Возможно, запустите диагностику оборудования в одночасье. Проверьте журналы во время сбоя. Возможно, проверьте, не хватает ли памяти для чего-то, что приводит к зависанию машины. И т.д. ...

Кроме того, вам нужно время от времени запускать apt autoremove , иначе обновления ядра будут собираться, пока ваш диск не заполнится.

2
ответ дан 20 August 2021 в 10:23

Нет.

  • Вы не используете sudo в cron. используйте root crontab, если вам нужен доступ к командам, требующим root
  • . Всегда используйте абсолютные пути в cron.
  • И вы не должны обновлять сервер --production-- без присмотра; вы делаете это вручную. Круто, если это настольный компьютер или тестовый / промежуточный сервер. Мой личный опыт связан с использованием серверов CLOUD: все, что происходит не так во время перезагрузки, является фатальным .

Но если вы действительно хотите это сделать, я бы добавил следующие 3 ...

  • добавить логирование к командам "apt"
  • добавить метод отправки вам по почте того, что было напечатано во время команд apt.
  • перед «apt» вы действительно должны также сделать полную резервную копию системы, которая хранится вне сервера. Когда обновление / обновление идет не так, как надо, и это влияет на вашу систему (99 из 100 - нет, но вы не хотите, чтобы это произошло;)), вернуть вашу систему в последнее рабочее состояние важнее, чем исправить проблему.

sleep 60 && sudo netplan apply && sleep 15 && sudo omd start website

Это не нужно. Я бы устроил это с "сервисом". Таким образом, вы можете создать цепочку команд, ожидающих друг друга. «спать 60» и «спать 15» ... что, если это должны быть 61 и 16? Сервисы исправят эту проблему за вас.

Кроме того, жизнеспособна ли часть 1,3,5? Будет ли это перезагружать машину в понедельник, пятницу и пятницу?

Как сказал Дэн в комментарии: crontab.guru с вашими вставленными правилами crontab состояния «В 02:00 понедельника, среды и пятницы. "

Если нет причин для перезагрузки, я бы не выполнял ее.У меня есть серверы, работающие более 5 лет, и каждый раз я устраняю проблемы с памятью и тому подобное: +

7
ответ дан 20 August 2021 в 10:23

Общее замечание: Вместо использования sudo в user crontab, подумайте о том, чтобы поместить эти команды в root crontab, чтобы они могли выполняться без sudo.

Что касается ваших 3 строк кронтаба:

@midnight sudo apt-get update && sleep 60 && apt-get upgrade -y

Вполне возможно выполнить apt-get update и apt-get upgrade -y таким образом. (Не предназначено для производственного сервера, и при условии, что вы понимаете последствия неуправляемых обновлений.)

00 02 * * * 1,3,5 sudo shutdown -r

Я бы не считал необходимым перезагружаться 3 раза в неделю. Я сам использую этот очень простой сценарий перезагрузки: (называется auto-reboot.sh)

#!/bin/bash

[[ -f /var/run/reboot-required.pkgs ]] && reboot

Я запускаю этот сценарий с помощью cron еженедельно, после обновления и очистки. Он перезагружается, только если машина нуждается в перезагрузке (если /var/run/reboot-required.pkgs существует). (Опять же, это не предназначено для производственного сервера.)

@reboot sleep 60 && sudo netplan apply && sleep 15 && sudo omd start website

Я не понимаю, зачем вам нужно запускать netplan apply при перезагрузке.

Кроме того, более надежным способом запуска службы, которая зависит от другой службы или условия (например, сети), является создание systemd .service для выполнения этой работы. Для этого существует несколько руководств (1, 2), которые я бы рекомендовал вам посмотреть.

7
ответ дан 20 August 2021 в 10:23

Другие вопросы по тегам:

Похожие вопросы: