Как я могу использовать крон для перезапуска апача в некоторых условиях

Это - первый раз, когда я использую крон. Я хочу перезапустить apacher в своем сервере, если объем доступной памяти идет меньше чем 500 МБ. Чтобы сделать так, я записал следующий сценарий:

restart_if_memory_full.sh (в/var/www/myapp/)

#!/bin/bash

mem=$(free -m | awk '/Mem:/{print $4}')
(( mem <= 500 )) && (sudo service apache2 restart)

Затем я сделал это исполняемый файл путем выполнения (sudo chmod +x restart_if_memory_full.sh) и добавил следующую строку к крону (sudo crontab -e) (Обратите внимание, что я не использовал .sh расширение, как рекомендуется),

* * * * * /var/www/myapp/restart_if_memory_full 

Теперь, я проверяю вывод (grep CRON /var/log/syslog) и посмотрите это:

Nov 11 11:13:01 mardy2 CRON[31963]: (root) CMD (/var/www/myapp/restart_if_memory_full)
Nov 11 11:13:01 mardy2 CRON[31962]: (CRON) info (No MTA installed, discarding output)

Однако, когда я проверяю использование памяти htop, оно не уменьшается, и поэтому я понял, что апачский сервер не был перезапущен. Так, как я могу сделать этот сценарий выполнимым?

0
задан 11 November 2019 в 14:25

1 ответ

Вместо того, чтобы делать проверку каждую минуту, я предложил бы выполнить бесконечную проверку сценария Ваш порог памяти и сделал бы его a systemd- сервис:

#!/bin/bash
#memory_check.sh
while [[ "free -m | awk '/Mem:/{print $4}'" -lt  500 ]] ; do
  sleep 5
done

#service called e.g. mem_check.service
[Unit]
Description=continuously monitors memory
After=apache2

[Service]
ExecStart=/path/to/memory_check.sh
Restart=on-failure
#let's give apache some time:
RestartSec=10s

Затем добавьте перезапуск dependeny к Вашему apache2.service в [Unit] раздел с:

PartOf=mem_check.service

PartOf= зависимость вперед перезапуск mem_check кому: apache2.

PartOf =

Настраивает зависимости, подобные, Требует =, но ограниченный остановкой и перезапуском единиц. Когда systemd останавливает или перезапускает единицы, перечисленные здесь, действие распространено к этой единице. Обратите внимание, что это - односторонняя зависимость — изменения в этой единице не влияют на перечисленные единицы.

Когда PartOf=b.service будет использоваться на a.service, эта зависимость покажет как ConsistsOf=a.service в списке свойств b.service. ConsistsOf = зависимость не может быть указан непосредственно.

(из https://www.freedesktop.org/software/systemd/man/systemd.unit.html)

0
ответ дан 22 December 2019 в 00:01

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

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