我的网站上有一个网站我想运行一些预定的任务.你会推荐哪些方法来达到这个目的?
到目前为止我已经想到的是在每个页面的顶部都包含一个脚本,然后让这个脚本检查是否是时候运行这个工作了.
这只是我想到的一个简单示例:
if ($alreadyDone == 0 && time() > $timeToRunMaintainance) { runTask(); $timeToRunMaintainance = time() + $interval; }
还有什么我应该考虑的还是有比这更好的方法?
这就是cronjobs的用途. man crontab
假设您正在运行Linux服务器.如果您没有shell访问权限或无法设置cronjobs,则可以使用免费服务在外部服务器上设置cronjobs并ping您的某个URL.
我现在正在回答这个问题,因为似乎没有人提到这个确切的解决方案.
在我正在处理的网站上,我们使用cPanel设置了一个cron作业,但不是直接运行PHP解释器(因为我们使用CodeIgniter而且我们的代码被映射到控制器函数,这可能不是'一个好主意)我们正在使用wget
.
wget -q -O cron_job.log http://somehost/controller/method
-q
是这样wget不会产生任何输出(所以你不会继续收到电子邮件).-O cron_job.log
将控制器生成的内容保存到日志文件中(每次都会覆盖,因此不会继续增长).
我发现这是让'正确'的cron工作最简单的方法.
如果您有cPanel主机,则可以通过Web界面添加cron作业.转到Advanced - > Cron Jobs并使用非高级表单设置cron频率.你想要一个像这样的命令:
/usr/bin/php /path/to/your/php/script.php
你见过ATrigger吗?该PHP库也可以启动没有任何开销创建计划任务.
免责声明:我是他们的团队之一.
如果你想知道如何从cron实际运行你的PHP脚本,有两个选项:直接调用PHP解释器(即"php /foo/myscript.php"),或使用lynx(lynx http:// mywebsite. com/myscript.php).您选择哪一个主要取决于您的脚本如何配置其环境 - 路径和文件访问权限将根据您是通过shell还是Web浏览器调用而不同.我推荐使用lynx.
一个副作用是每次运行时都会收到一封电子邮件.为了解决这个问题,我让我的cron PHP脚本输出任何内容(如果它们成功完成则不必输出任何内容,甚至不是空格),如果失败则输出错误消息.然后我使用cron的一个小PHP脚本调用它们.这样,如果失败,我只收到一封电子邮件.这与lynx方法基本相同,除了我的shell脚本发出HTTP请求而不是lynx.
将此脚本称为"docron"或其他内容(记住chmod + x),然后在crontab中使用该命令:"docron http://mydomain.com/myscript.php ".如果页面返回某些内容,它会将页面输出通过电子邮件发送给HTML电子邮件.
#!/usr/bin/php Failed to open file: " . $_SERVER['argv'][1]; } if ($h != '') { @mail("cron@mydomain.com", $_SERVER['argv']['1'], $h, "From: cron@mydomain.com\nMIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-1"); } ?>