这是我第一次使用cron。如果可用内存量少于500 mb,我想重新启动服务器中的apacher。为此,我编写了以下脚本:

restart_if_memory_full.sh(在/ var / www / myapp /中)

#!/bin/bash

mem=$(free -m | awk '/Mem:/{print $4}')
(( mem <= 500 )) && (sudo service apache2 restart)


然后我通过运行(sudo chmod +x restart_if_memory_full.sh)使它可执行,并通过(sudo crontab -e)将以下行添加到cron中(注意,我没有按照建议使用.sh扩展名)

* * * * * /var/www/myapp/restart_if_memory_full


现在,我用(grep CRON /var/log/syslog)检查输出,然后看到:

Nov 11 11:13:01 mardy2 CRON[31963]: (root) CMD (/var/www/myapp/restart_if_memory_full)
Nov 11 11:13:01 mardy2 CRON[31962]: (CRON) info (No MTA installed, discarding output)


但是,当我通过htop检查内存使用情况时,它没有减少,因此我意识到apache服务器没有重新启动。因此,如何使该脚本可运行?

最佳答案

您基本上可以自己回答问题:


  注意我没有按照建议使用.sh扩展名


这不仅是扩展名,还是文件名的一部分。因此,如果您的脚本另存为/var/www/myapp/restart_if_memory_full.sh,则不能仅删除后缀。 Cron将找不到该文件,并且不会做任何事情。 Cron甚至想通过电子邮件通知您,但是没有安装邮件服务器来发送警报:

(CRON) info (No MTA installed, discarding output)

因此,请使用脚本的完整路径和名称:

* * * * * /var/www/myapp/restart_if_memory_full.sh

10-05 22:49
查看更多