这是我第一次使用 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 服务器没有重新启动。那么,如何使该脚本可运行?
最佳答案
您基本上自己回答了您的问题:
Note I did not use .sh extension as recommended
这不仅仅是一个扩展名,它是文件名的一部分。因此,如果您的脚本保存为 /var/www/myapp/restart_if_memory_full.sh
您不能只删除后缀。 Cron 不会找到该文件,也不会执行任何操作。 Cron 甚至想通过电子邮件通知您,但没有安装邮件服务器来发送警报:
(CRON)信息(未安装 MTA,丢弃输出)
。
因此请使用脚本的完整路径和名称:
* * * * * /var/www/myapp/restart_if_memory_full.sh
关于linux - 重启 apache 服务器的 Cron 脚本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58800265/