Crontab 重新启动服务

Crontab 重新启动服务

我在 AWS EC2 微型实例上运行 Web 服务器。该实例有 ~630MB 的 RAM。随着时间的推移,我有几个 httpd 进程和很少的可用 RAM。当我重新启动 httpd 服务时,我最终释放了大约 350MB 的 RAM。

我考虑使用 root 下的 cron 任务每 12 小时自动执行一次。我的脚本包含以下代码:

service httpd restart
service mysqld restart
ps aux
free -m

这是我第一次尝试 cron 脚本。

我收到一封电子邮件,其中包含预期的输出ps auxfree -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

答案1

主要问题是 cron 的运行环境中没有适当的$PATH定义,因此您需要使用完整路径才能service使其工作。

您可以使用命令找出该路径which service,该命令应该打印类似的内容 /usr/sbin/service

第二个问题:我不会这么做,盲目地重启生产系统上的服务永远不是一个好主意。你是否有实际的内存/性能问题,或者你的 RAM 是否只是被缓冲区等占用了(请参阅http://www.linuxatemyram.com/)?

free -m请将几个小时后的输出添加到您的问题中。

答案2

最好看看 Monit 之类的东西,而不是尝试编写自制的 cron 脚本。

以下是 Apache 的示例配置:

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

你应该能够做类似的事情:

if totalmem > 300 MB for 2 cycles then alert

在 Apache 块中。

Monit 应该位于其中一个 RPM 存储库中。

答案3

我认为你的做法是错误的。首先研究如何调整 Apache。然后研究 Linux 内存管理。你希望你的服务器使用内存,否则你为什么要拥有它?

答案4

你为什么想要空闲的 RAM?空闲的 RAM 是浪费的 RAM。要么你计算错了空闲的 RAM 数量,没有将缓存内存算作空闲的 RAM(参见linuxatemyram.com)或者你应该调整你的 apache 以减少 MaxClients 的数量,这样 apache 将使用更少的内存。

相关内容