2011-02-09 20 views
5

Tôi muốn có một đơn giản quản lý cron giống như trong dự án PHP có một số điều tôi muốn có:Tôi nên sử dụng những gì để quản lý các công việc cron đơn giản trong dự án PHP?

  1. php lao động công việc chỉ là kịch bản đơn giản được đặt trong một số subdir bên trong thư mục dự án
  2. có là cây con như/cron/daily,/cron/monthly ... etc trong thư mục gốc của dự án chứa tất cả những người lao động
  3. không cần phải gây rối với crontab với mọi nhân viên được thêm vào.
  4. tất cả các tập lệnh được điều hành bởi một số phần như tần số tương ứng và đầu ra tương ứng được ghi vào các tệp riêng biệt như /var/log/projectname/cron/daily/somescript.log
  5. sẽ rất tuyệt/cron/daemon dir chứa các tập lệnh sẽ được chạy vĩnh viễn (tối thiểu) nhưng không quá 1 bản sao

Tôi đã có kinh nghiệm với loại hệ thống lập kế hoạch đó trong một dự án và yêu thích nó. Nó cung cấp một số điều gọn gàng:

  • công việc là các tập lệnh dự án và nằm trong thư mục dự án, được theo dõi bởi git.
  • không cần crontab gây rối.
  • nhật ký được sắp xếp.
  • daemon rất dễ xây dựng.

Tôi sẽ chỉ sử dụng/bin/run-parts trên subdirs dự án/cron, nhưng không quản lý để tách nhật ký như tôi muốn. Và chia nhỏ khai thác gỗ là tính năng rất tốt đẹp để có.

Vì vậy, tôi chỉ nghĩ rằng loại hệ thống này đã được tạo ra nhiều lần trước đây, có sẵn sàng để sử dụng giải pháp cho dự án PHP không? Về cơ bản nó chỉ là một số chi tiết tương đương run-phần tương đương. Chỉ nên viết lại một lần nữa?

P.S. Có nhiều giải pháp cụ thể về hàng công việc hơn như Gearman. Họ là tuyệt vời, nhưng quesion này là về dự án cron công việc nhẹ giải pháp.

+0

Thực hiện tìm kiếm google cho "pseudo-cron", có có rất nhiều kịch bản miễn phí mà có thể được điều chỉnh. Nhưng nhìn chung, tôi tự viết nó; Tôi đã thực hiện nó trước và nó không khó. – Benubird

+0

Cảm ơn, giả-cron là những điều thú vị, nhưng chúng không phải là rất thuận tiện: công việc không phải là công việc cron ở tất cả, lịch trình có thể bị bỏ qua, và bạn nên viết pseudo-crontab. vì sự khó khăn - vâng, nó không quá khó, thực ra tôi chỉ có cảm giác tôi có thể không biết một số giải pháp tuyệt vời Tôi sẽ tái tạo và viết lại – evgenyq

+0

Bất kỳ phản hồi nào liên quan đến các câu trả lời được đưa ra dưới đây? – tobyS

Trả lời

0

Periodic is a CRON compatible task manager được viết bằng PHP. Để làm cho nó hoạt động như bạn mong muốn nó, sẽ vẫn còn một số công việc phải làm, nhưng nó sẽ cung cấp cho bạn một cơ sở tốt.

+0

Trông giống như công ty đằng sau điều này, Arbit đã biến mất. – Richard

+0

Bạn vẫn có thể tìm thấy các nguồn Định kỳ trên Github https://github.com/Arbitracker/Periodic. – tobyS

2

Chúng tôi đã thực hiện một cách tiếp cận hơi khác so với công việc hiện tại của tôi. Chúng tôi sử dụng Jenkins (trước đây là Hudson) cho các nhu cầu lập kế hoạch liên quan đến PHP của chúng tôi. Thật tuyệt vì bạn có thể tận dụng cơ sở hạ tầng hiện có cho các thông báo (jabber, email, v.v.) và nó nằm cùng với các công việc xây dựng khác của chúng tôi để phát hành mã. Ngoài ra còn có khả năng xem kết quả đầu ra của bàn điều khiển trong thời gian thực, lấy bảng điểm của mỗi lần chạy, v.v.

Tôi đã ghi lại cách chúng tôi sắp xếp công việc PHP của mình gần đây để có thể dễ dàng sử dụng khung ứng dụng của chúng tôi từ CLI. giao diện với các công việc.

Dưới đây là bài viết về việc tổ chức công việc PHP batch để sử dụng với Jenkins hoặc Hudson:

http://blog.shupp.org/2011/03/15/organizing-php-batch-jobs/

-1

Sử dụng chức năng này:

function parse_crontab($time, $crontab) 
     {$time=explode(' ', date('i G j n w', strtotime($time))); 
      $crontab=explode(' ', $crontab); 
      foreach ($crontab as $k=>&$v) 
        {$v=explode(',', $v); 
        foreach ($v as &$v1) 
          {$v1=preg_replace(array('/^\*$/', '/^\d+$/', '/^(\d+)\-(\d+)$/', '/^\*\/(\d+)$/'), 
              array('true', $time[$k].'===\0', '(\1<='.$time[$k].' and '.$time[$k].'<=\2)', $time[$k].'%\1===0'), 
              $v1 
              ); 
          } 
        $v='('.implode(' or ', $v).')'; 
        } 
      $crontab=implode(' and ', $crontab); 
      return eval('return '.$crontab.';'); 
     } 
var_export(parse_crontab('2011-05-04 02:08:03', '*/2,3-5,9 2 3-5 */2 *')); 
var_export(parse_crontab('2011-05-04 02:08:03', '*/8 */2 */4 */5 *')); 
+0

$ time và $ crontab là bao nhiêu? –

+0

@Bhargav, hãy xem hai ví dụ ở dưới cùng – diyism

Các vấn đề liên quan