php planlanan süreç oluşturmak için nasıl?

5 Cevap

Ben belirli bir süre için kullanıcı güncellemeleri göndermek olacak bir web uygulamaları oluşturmak istendi.

örneğin

  1. user1 Haziran her 5 dakikada güncellemeleri soran - Ağustos 2009
  2. user2 güncellemeleri için bugün her 10 dakikada soran sadece
  3. kullanıcı3 haziran her 1 gün güncellemeleri soran - Ağustos 2009

I have no idea how to automatic the background process ... should I add to cron ? can cron works on windows server (apache on windows) ?

5 Cevap

Windows Server Eğer zamanlanmış görevler yazabilirsiniz. Zamanlanmış bir görev olarak istediğiniz frekansa güncelleştirmeyi çalıştırmak için ayarlayabilirsiniz.

Kimden Microsoft Knowledge Base:

Zamanlanmış Görevler ile, sizin için en uygun olan bir zamanda çalıştırmak için herhangi bir komut dosyası, program veya belgeyi zamanlayabilirsiniz.

Bir daha programlı yaklaşım kullanıcılar ve son güncelleme zaman ayarları kaydetmek olacaktır. Sonra o kontrol eder ve gerektiği gibi güncelleştirmeyi çalışan bir komut dosyası var olabilir.

Eğer kullanıcıların ayarlara dayalı güncellemeleri yapmak hangi böylece komut dosyası her dakika çalıştırmak veya bir zamanlanmış görev olabilir.

Marcel önerdiği gibi, ben tek bir cron işi (* nix) / zamanlanmış görev (Windows) oluşturmak ve bu kez bir dakika kadar çalıştırın olurdu.

Bu işi daha sonra, tüm kullanıcıların güncelleştirme abonelikler üzerinden bakmak gönderilmek üzere yeni bir güncelleştirme gerektiren belirlemek ve bunları göndermek istiyorsunuz. Açıkçası, size bir seferde birçok kullanıcı işlemek için çalışırsanız bir sorun olabilir, (iş her dakika çalışır eğer) bu işi bir dakikadan az tamamlamak isteyeceksiniz.

I not PHP içinde tarifeli / görevler cron istihdam yaratmak ve yönetmek için çalışıyorum tavsiye ederim. Bu PHP kodu kalanını işlemek sonra, bir zamanlar tek bir iş kurmak çok kolay.

Cron jobs / zamanlanmış görevler sizin için işe yaramazsa, aynı zamanda web sitenize sıradan istekleri üzerine domuz-destek düşünebilirsiniz. Bu, örneğin bir nasıl Wikipedia'nın MediaWiki yazılımı arka plan görevlerini kolları - bir iş kuyruğunu çıkardı ve ilgisiz sayfa isteklerinin bir parçası olarak işlenmiş ediyoruz.

Bir Cron veya düşük ortak aralığı (5 dakika? 1 dakika?) De yürütür Tarifeli görevi ekleyin.

Zamanlanmış görev kullanıcının görev sıklığına ilişkin bilgi tutan bir veritabanı tablosunu sorgulamak gerekir. Ben infaz için uygunluğu belirlemek için bir UNIX zaman damgası kullanın, sonra saniyede frekansı ifade olur. Hesaplama sonra biraz kolaydır:

  • - (TIMESTAMP% 60) ŞİMDİ = DAMGASI: şimdiki zaman bulmak, (60 saniye aralığını varsayarak) yakın ortak aralıkta aşağı yuvarlanır
  • Kimin aralığı geçerli sürenin daha da bölen kullanıcıları bul

Tablo bu gibi görünebilir:

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')

Çalıştırmak için iş bulmak için, bu sorgu işe yarayabilir:

SELECT `user_id`, `task`
FROM `scheduled_tasks` 
WHERE (UNIX_TIMESTAMP() - (UNIX_TIMESTAMP() % 60 ) ) % `interval` = 0
  AND CURDATE() BETWEEN `date_start` AND `date_end`

Bu çalıştırmak için kullanıcıların / görevler listesi ile geri geliyor. Gerekirse kullanıcı başına birden çok giriş ekleyebilirsiniz.

Windows cron kullanmak değildir, ama zamanlama çeşit var düşünüyorum. Bu sorunun cevabı, genel olarak, evet, cron işleri arka planda bu çalıştırmak için bir yol olmasıdır.

Ben sadece Windows XP ve 2003 altında Apache, PHP ve zamanlanmış görevler kullanan bir proje yazdım. Oldukça kolay ve cron benzer çalışır.

Unutulmaması gereken bir şey - GUI kontrolleri zamanlanmış görevler için komut satırı olarak granül değildir. Ben daha sık bir günde bir kez daha herhangi bir zamanlama mümkün değildi. Neyse ki, bunu yapmak için komut satırını kullanabilirsiniz.

schtasks / create / sc dakika / ay 10 / st 00:00:00 / tn "Görev Adı" Burada / ru "Sistem" / tr "C: \ wamp bin \ php \ \ php5.3.0 \ php.exe \" C : \ Program Files \ script.php \ ""

Bu 'Sistem' adınız altında, 'Burada Görev Adı' olarak adlandırılan, (gece yarısı başlayan) her 10 dakikada bir çalışan bir zamanlanmış görevler oluşturur. Eğer yolun çevresinde kaçan tırnak görüyor musunuz? Siz bunları boşluklar var yolları etrafında kaçtı tırnak koymak gerekir.