Eik*_*ern 41 php cron scheduling scheduled-tasks
我的网站上有一个网站我想运行一些预定的任务.你会推荐哪些方法来达到这个目的?
到目前为止我已经想到的是在每个页面的顶部都包含一个脚本,然后让这个脚本检查是否是时候运行这个工作了.
这只是我想到的一个简单示例:
if ($alreadyDone == 0 && time() > $timeToRunMaintainance) {
runTask();
$timeToRunMaintainance = time() + $interval;
}
Run Code Online (Sandbox Code Playgroud)
还有什么我应该考虑的还是有比这更好的方法?
Arm*_*her 34
这就是cronjobs的用途. man crontab
假设您正在运行Linux服务器.如果您没有shell访问权限或无法设置cronjobs,则可以使用免费服务在外部服务器上设置cronjobs并ping您的某个URL.
小智 17
我现在正在回答这个问题,因为似乎没有人提到这个确切的解决方案.
在我正在处理的网站上,我们使用cPanel设置了一个cron作业,但不是直接运行PHP解释器(因为我们使用CodeIgniter而且我们的代码被映射到控制器函数,这可能不是'一个好主意)我们正在使用wget
.
wget -q -O cron_job.log http://somehost/controller/method
Run Code Online (Sandbox Code Playgroud)
-q
是这样wget不会产生任何输出(所以你不会继续收到电子邮件).-O cron_job.log
将控制器生成的内容保存到日志文件中(每次都会覆盖,因此不会继续增长).
我发现这是让'正确'的cron工作最简单的方法.
Dav*_*lin 12
如果您有cPanel主机,则可以通过Web界面添加cron作业.转到Advanced - > Cron Jobs并使用非高级表单设置cron频率.你想要一个像这样的命令:
/usr/bin/php /path/to/your/php/script.php
Run Code Online (Sandbox Code Playgroud)
如果你想知道如何从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
<?php
$h = @file_get_contents($_SERVER['argv'][1]);
if ($h === false)
{
$h = "<b>Failed to open file</b>: " . $_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");
}
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55606 次 |
最近记录: |