Я запускаю веб-сервер на микро-экземпляре 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
Основная проблема в том, что нет правильного $PATH
определен в среде запуска cron, поэтому вам нужно использовать полный путь к service
чтобы это работало.
Вы можете узнать этот путь с помощью команды which service
, который должен напечатать что-то вроде /usr/sbin/service
.
Вторая проблема: я бы не стал этого делать, просто слепой перезапуск сервисов в производственной системе - плохая идея. У вас есть реальная проблема с памятью / производительностью, или, возможно, ваша оперативная память просто занята буферами и т.п. (см. http://www.linuxatemyram.com/)?
Пожалуйста, добавьте вывод free -m
через несколько часов на ваш вопрос.
Возможно, лучше было бы взглянуть на что-то вроде Monit, чем пытаться сделать самодельный скрипт cron.
Вот пример конфигурации для Apache:
http://mmonit.com/wiki/Monit/ConfigurationExamples#apache
Вы должны уметь делать что-то вроде:
if totalmem > 300 MB for 2 cycles then alert
в блоке Apache.
Monit должен находиться в одном из репозиториев RPM.
Я думаю, вы ошибаетесь. Прежде всего, обратите внимание на настройку Apache. Затем исследуйте управление памятью Linux. Вы ХОТИТЕ, что ваш сервер использует ОЗУ, иначе зачем он вам?
Зачем вам бесплатная оперативная память? свободный баран - это потраченная впустую RAM. Либо вы неправильно рассчитываете количество свободной оперативной памяти, не считая кеш-память как свободную оперативную память (см. linuxatemyram.com) или вам следует настроить Apache для меньшего количества MaxClients, чтобы apache использовал меньше памяти.