簡體   English   中英

每分鍾運行Cron或動態編寫Cron Job更好嗎?

[英]Is it better to run Cron every minute or write Cron Job dynamically?

我有一個簡單的應用程序,用戶可以在其中添加帖子並安排它在特定時間上線。

現在我面前有兩種方法:

第一種方法:我可以設置一個腳本,該腳本將每分鍾調用一次,它將檢查當前是否有任何待處理的帖子,並以如下方式發布它們:

我的Cron工作:

1 * * * * php myScriptToMakePostLive.php

要么

第二種方法我可以在用戶提交帖子以供以后發布時在服務器上動態設置cron作業。 我正在使用此腳本:

 public function schedulePost(){
        $post = new Post();
        $post->body = $_POST['body'];
        $post->save();

        $scheduledTime = Carbon::parse($_POST['publish_on']);

        //saving cron dynamically 
        $output = shell_exec('crontab -l');
        file_put_contents('/tmp/crontab.txt', $output.PHP_EOL."{$scheduledTime->minute} {$scheduledTime->hour} {$scheduledTime->day} {$scheduledTime->month} * php myScriptToMakePostLive {$post->id}".PHP_EOL);
        echo exec('crontab /tmp/crontab.txt');
        die('Your post has been Scheduled !!');

    } 

我想知道哪種方法更好,為什么呢?

我會選擇第一種方法,因為它要簡單得多。 您只有一個活動部分(單個cron作業),而不是在每個計划的帖子中添加新的作業。 您還會在選項#2中冒風險,即有2個進程試圖同時寫入crontab,並有可能丟失其中一項作業。 #1簡單明了,我不明白#2真正能給您帶來什么。

嗯,說實話,也沒有。

我會使用celery之類的日程安排服務。 如果我絕對必須推出自己的調度服務,它將與at而不是cron

它還取決於您認為用戶安排帖子的頻率。 我懷疑這是否經常發生。

我認為我會使用“靜態cronjob”方法並將作業存儲在數據庫上,因為“ cron作為動態的oneoff調度程序”存在一些缺點:

  • 那個crontab會變大... croned作業應該在運行時從crontab中刪除嗎?

  • 如果您的服務器在應派遣作業時出現停機,該怎么辦? crontab是否檢查過期的工作?

  • 如果您需要將應用程序移動到另一台服務器,則需要遷移crontab ...看起來很奇怪,但也許並不是那么奇怪。

  • 運行包含用戶輸入的shell命令需要非常小心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM