这是我第一次使用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服务器没有重新启动。那么,如何使该脚本可运行?
答案 0 :(得分:1)
您基本上可以自己回答问题:
请注意,我没有按照建议使用.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