Назад | Перейти на главную страницу

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

Основная проблема в том, что нет правильного $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 использовал меньше памяти.