Вопрос: Crontab для перезапуска службы


Я запускаю веб-сервер на микро-экземпляр AWS EC2. Экземпляр имеет ~ 630 МБ ОЗУ. Со временем у меня есть несколько процессов httpd и очень мало свободной памяти. Когда я перезапускаю службу httpd, я в конечном итоге освобождаю около 350 МБ ОЗУ.

Я думал, что это автоматизировано каждые 12 часов, используя работу cron под root. Мой скрипт включает в себя код как

service httpd restart
service mysqld restart
ps aux
free -m

Это первый раз, когда я пытаюсь использовать скрипты cron.

Я получаю электронное письмо с ожидаемым выходом для ps aux а также free -m, но

./scriptName.sh: line 1: service: command not found
./scriptName.sh: line 2: service: command not found

для перезапуска команд.

Скрипт выполнялся как root. Я боюсь, что использование sudo может привести к зависанию скрипта. Соответствующие строки из ps -

root     14664  0.0  0.2 142200  1720 ?        S    22:41   0:00 CROND
root     14665  0.0  0.2   9296  1236 ?        Ss   22:41   0:00 /bin/sh -c ./scriptName.sh
smmsp    14667  0.0  0.6  76020  4244 ?        R    22:41   0:00 /usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root
root     14669  0.0  0.1  11244  1008 ?        R    22:41   0:00 ps aux

Что нужно делать, чтобы успешно перезапустить службы?

Можно ли даже сделать что-то подобное?

Вывод free -m

             total       used       free     shared    buffers     cached
Mem:           596        573         23          0          8         71
-/+ buffers/cache:        493        103
Swap:            0          0          0

5
2018-02-17 00:00


Источник


Поскольку вы используете apache и, вероятно, используете mpm_prefork, то почему бы не установить MaxRequestsPerChild, поэтому дочерние процессы прекращаются после обработки определенного количества запросов? Затем вернемся к правильному ответу? Перезапуск ваших сервисов, таких как mysql, потому что он использует память, - плохая идея. Весь смысл использования памяти - это то, что она может быстрее дать вам ответы. Если он использует слишком много, то настройте параметры. - Zoredache


Ответы:


Основная проблема заключается в том, что нет надлежащего $PATH определенный в среде выполнения cron, поэтому вам необходимо использовать полный путь к service для этого работать.

Вы можете узнать этот путь с помощью команды which service, который должен печатать что-то вроде /usr/sbin/service,

Вторичная проблема: я бы этого не сделал, просто слепо перезапуск служб на производственной системе никогда не будет хорошей идеей. У вас есть проблема с памятью / производительностью или может быть, что ваша оперативная память просто используется буферами и тому подобное (см. http://www.linuxatemyram.com/)?

Пожалуйста, добавьте вывод free -m через несколько часов на ваш вопрос.


12
2018-02-17 00:10



Добавлено o / p of free -m, - Lord Loh.


Возможно, было бы лучше посмотреть на что-то вроде Монита, вместо того, чтобы пытаться создать сценарий cronbrew.

Вот пример конфигурации для Apache:

http://mmonit.com/wiki/Monit/ConfigurationExamples#apache

Вы должны иметь возможность сделать что-то вроде:

if totalmem > 300 MB for 2 cycles then alert

в блоке Apache.

Монит должен находиться в одном из репозиториев RPM.


3
2018-02-17 00:12





Думаю, вы ошибетесь. Посмотрите на настройку Apache в первую очередь. Затем исследуйте управление памятью Linux. Вы ХОТИТЕ ваш сервер, используя ram, иначе почему у вас есть это?


2
2018-02-17 00:36



Думаю, я постараюсь настроить апач. Моя операционная система очень ограничена и хочет иметь некоторую бесплатную память для какого-то процесса. - Lord Loh.
Я запускаю несколько сайтов на крошечном экземпляре, которые получают много хитов. Прочитай это: linuxatemyram.comваш баран будет там для процессов, если ваши сайты не будут забиты. NINJA EDIT: вы хотите, чтобы Apache использовал этот плунжер, иначе ваши сайты будут медленно загружаться. Если что-то нуждается в баране, и вы не получите кучу трафика, система будет «освобождать» его для использования этого процесса. - Publiccert


Почему вы хотите бесплатную оперативную память? Свободный RAM - это потерянный RAM. Либо вы просчитываете количество свободного места, не считая кэш-память, как свободный баран (см. linuxatemyram.com), или вы должны настраивать apache для меньшего количества MaxClients, чтобы apache уменьшал память.


0
2018-02-17 01:01



У меня всего 630 МБ ОЗУ. Я бы хотел, чтобы некоторые были бесплатными для некоторого случая и не исчерпали его на 100%. - Lord Loh.
@LordLoh. - вам нужно узнать, как Linux использует ОЗУ. Тушеное мясо правильное, вы не действительно хочу любой свободный баран. Не пытайтесь выучить ядро ​​Linux, когда дело доходит до управления памятью. Просто позвольте системе работать и делать свое дело. - EEAA♦
@ LordLoh.how вы определяете количество свободной RAM? - stew
@stew - запустив free -m, - Lord Loh.
и правильно ли вы используете дисковое хранилище в качестве кеша? Ваш вывод free -m на самом деле показывает, что у вас на самом деле 15% или около того вы свободны от RAM? - stew