Crontab para reiniciar o serviço

5

Estou executando um servidor da web em uma microinstância do AWS EC2. A instância tem ~ 630MB de RAM. Com o tempo, tenho vários processos de httpd e pouca RAM livre. Quando eu reinicio o serviço httpd, acabo liberando cerca de 350MB de RAM.

Pensei em automatizá-lo a cada 12 horas usando um cron job em root. Meu script inclui código como

service httpd restart
service mysqld restart
ps aux
free -m

Esta é a primeira vez que eu estou tentando scripts cron.

Eu recebo um email com a saída esperada para ps aux e free -m , mas

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

para os comandos de reinicialização.

O script foi executado como root. Eu tenho medo que usar sudo possa fazer com que o script seja interrompido. As linhas relevantes da saída de 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

Qual é a coisa certa a fazer para ter uma reinicialização bem-sucedida dos serviços?

É mesmo aconselhável fazer algo assim?

Saída de free -m

             total       used       free     shared    buffers     cached
Mem:           596        573         23          0          8         71
-/+ buffers/cache:        493        103
Swap:            0          0          0
    
por Lord Loh. 17.02.2012 / 01:00

4 respostas

12

O principal problema é que não há um $PATH adequado definido no ambiente de execução do cron, portanto, é necessário usar o caminho completo para service para que isso funcione.

Você pode descobrir esse caminho com o comando which service , que deve imprimir algo como /usr/sbin/service .

O problema secundário: eu não faria isso, apenas reiniciando cegamente os serviços em um sistema de produção nunca é uma boa ideia. Você tem um problema real de memória / desempenho ou pode ser que sua memória RAM seja consumida apenas por buffers e afins (veja link ) ?

Adicione a saída de free -m após algumas horas à sua pergunta.

    
por 17.02.2012 / 01:10
3

Pode ser melhor olhar para algo como Monit em vez de tentar fazer um script cron homebrew.

Aqui está o exemplo de configuração para o Apache:

link

Você deve ser capaz de fazer algo como:

if totalmem > 300 MB for 2 cycles then alert

no bloco do Apache.

Monit deve estar em um dos repositórios do RPM.

    
por 17.02.2012 / 01:12
2

Eu acho que você está indo sobre isso da maneira errada. Procure ajustar o Apache antes de tudo. Em seguida, pesquise o gerenciamento de memória do Linux. Você quer o seu servidor usando o ram, caso contrário, por que você tem isso?

    
por 17.02.2012 / 01:36
0

Por que você quer RAM livre? RAM livre é desperdiçada RAM. Ou você está calculando mal a quantidade de RAM livre, não contando a memória cache como memória RAM livre (veja linuxatemyram.com ) ou você deve estar ajustando o seu apache para menos MaxClients para que o apache nos faça menos memória.

    
por 17.02.2012 / 02:01