我被要求创建一个网络应用程序,它会在一段时间内向用户发送更新。
例如
我不知道如何自动后台进程...我应该添加到cron吗? cron可以在Windows服务器上运行(Windows上的apache)吗?
答案 0 :(得分:3)
在Windows Server上,您可以编写计划任务。在计划任务中,您可以将其设置为将更新运行到所需的频率。
使用计划任务,您可以安排任何脚本,程序或文档在最方便的时间运行。
更具程序性的方法是保存用户的设置和上次更新时间。然后,您可以使用一个脚本来检查并根据需要运行更新。
您可以让计划任务每隔一分钟左右运行一次,根据用户的设置进行更新。
答案 1 :(得分:1)
正如Marcel所建议的,我会创建一个单独的cron作业(* nix)/计划任务(Windows),并让它每分钟运行一次。
然后,此作业将查看所有用户的更新订阅,确定哪个需要发送新更新,然后发送它们。显然,你需要在不到一分钟的时间内完成这项工作(如果工作每分钟运行一次),如果你试图一次性处理很多用户,这可能会有问题。
我不建议尝试从PHP中创建和管理cron作业/计划任务。将一个作业设置一次,然后用PHP代码处理其余的作业要容易得多。
如果cron作业/计划任务不适合您,您还可以考虑对您网站的普通请求进行捎带。这是例如维基百科的MediaWiki软件如何处理后台任务 - 它们被排除在作业队列之外,并作为无关页面请求的一部分进行处理。
答案 2 :(得分:1)
添加以最低常用间隔(5分钟?1分钟?)执行的Cron或计划任务。
计划任务应查询包含用户任务频率信息的数据库表。我会以秒为单位表示频率,然后使用UNIX时间戳来确定执行的资格。然后计算有点容易:
表格看起来像这样:
CREATE TABLE `scheduled_tasks` (
`id` int(7) unsigned NOT NULL auto_increment,
`user_id` int(7) unsigned NOT NULL,
`task` varchar(32) NOT NULL,
`interval` int(10) NOT NULL,
`date_start` date NOT NULL default '0000-00-00',
`date_end` date NOT NULL default '2030-12-31', -- Hopefully you won't be still maintaining this app
PRIMARY KEY (`id`)
) ;
INSERT INTO `scheduled_tasks` (user_id, task, interval, date_start, date_end )
VALUES
(1, 'standard_job', 5*60, '2009-06-01', '2009-08-01'),
(2, 'standard_job', 10*60, CURDATE(), CURDATE() ),
(3, 'standard_job', 24*60*60, '2009-06-01', '2009-08-01')
要查找要运行的作业,此查询可以起作用:
SELECT `user_id`, `task`
FROM `scheduled_tasks`
WHERE (UNIX_TIMESTAMP() - (UNIX_TIMESTAMP() % 60 ) ) % `interval` = 0
AND CURDATE() BETWEEN `date_start` AND `date_end`
返回一个要运行的用户/任务列表。如有必要,您可以为每个用户添加多个条目。
答案 3 :(得分:0)
windows不使用cron,但我认为它确实有某种调度。答案一般来说是肯定的,cron工作是在后台运行这些工作的方法。
答案 4 :(得分:0)
如果您在专用服务器上,则可以使用系统工具> Windows服务器上的计划任务。 如果您真的无法更改服务器上的任何内容,可以尝试在Linux服务器上运行cron,向Windows服务器发送请求...呵呵
答案 5 :(得分:0)
我刚刚编写了一个在Windows XP和2003下使用Apache,PHP和计划任务的项目。它非常简单,与cron类似。
有一点需要注意 - 计划任务的GUI控件不像命令行那样精细。我不能比一天更频繁地安排一次。幸运的是,您可以使用命令行来执行此操作。
schtasks / create / sc minute / mo 10 / st 00:00:00 / tn“Task Name Here”/ ru“System”/ tr“C:\ wamp \ bin \ php \ php5.3.0 \ php.exe \“C:\ Program Files \ script.php \”“
这将创建一个每10分钟(从午夜开始)运行的计划任务,在“系统”用户标识下称为“此处的任务名称”。你看到路径周围的逃脱报价吗?您需要在其中包含空格的路径周围放置转义引号。