Cron 作业终止 MySQL 服务器

Cron 作业终止 MySQL 服务器

我有一个使用 wget 调用 PHP 脚本的 CRON 作业;我已经这样设置它,因为我已经设置了所有对象,并且可以在网站的其他地方使用。

通过输入地址来调用此 PHP 脚本,该脚本运行没有问题;这不是一个特别长的运行过程,大约 6 秒(最多)。但是,使用 CRON 作业运行时,其中一个 MySQL 进程的 CPU 占用率高达 100%,并终止了服务器其余部分的响应。我收到的异常是“连接过多”、“查询执行被中断”和“无法通过套接字连接到本地服务器...”的混合。我怀疑所有这些都是 100% CPU 使用率的症状。我无法终止该进程,我必须(软)重启服务器。

CRON 调用如下:

*/10 * * * * /usr/bin/wget --user-agent="MyWebsite.com" --quiet --tries=0 -O - http://www.example.com/cron/script?password=example

这会对我的服务器造成 DOS 攻击吗?

短暂性脑缺血发作

  • 更新:只是说脚本有时会运行一段时间(最多 24 小时),有时只运行几分钟。

答案1

您必须告诉 Cron 以哪个用户身份运行该命令。cron 作业格式为:

# m h dom mon dow user  command

或者,您可以通过 创建自己的 crontab crontab -e。这将为您提供现成的框架供您编辑。另一件要尝试的事情是确保 Cron 喜欢命令语法。

答案2

http://www.example.com你的服务器??

我的意思是很难理解 wget 与 mysql 有何关系......

也许你会在同一台服务器上通过 wget 询问你的脚本?并且这个脚本会杀死 CPU。只是一个想法。

答案3

从 Quanta 的评论中继续,我下定决心将我的框架实现为 CLI 调用而不是 HTTP。比预期的要容易,因为我只需要更改我的“httpvariables”类以接受命令行参数以及 HTTP。现在,没有 MySQL 问题!使用 WGET 时,一定有什么东西挂在 MySQL 会话上。我读了很多地方,没有任何信息表明这应该是一个问题,有些地方建议 WGET 实际上是一种从 CRON 计划调用 PHP 脚本的更快方法。

我通过设置 -tries=1 而不是 0 解决了 wget 的初始问题,因为我认为服务器响应太慢,所以 wget 一次又一次地查询它,有效地对我的服务器进行 DOS 攻击。这允许服务器自行恢复,但让任何页面请求的速度变慢是不可接受的。

谢谢大家的回复,让我想到了一些替代方案!

相关内容