crontab+shell 實現每秒執行一個任務

qingshanyinyin發表於2019-05-20
3f3uYOfajK.png!large

1. 編輯crontab

fpxzrDJJIH.png!large
ps:第27行為1分鐘執行一次,結果存到*/root/log/sms.log*中,包括輸出和錯誤資訊。

2. 編寫shell指令碼

sendSms指令碼

ps:每秒執行一次 **for**迴圈中的內容,sleep $step=1!

3. 執行結果

結果

ps:以上實現了每秒輸出一個數字!如將do迴圈中內容替換成下圖所示兩行即可實現,每秒執行一次./yii sms/sendsms (sms控制器中 `sendsms` 方法)!

sendSms

ps:以上將結果重定向到sms.log日誌中!

4. 定時觸發

定時觸發

ps:8:30 或者8:40執行!

執行結果

5. php程式碼

public function actionSendsms($mobile='xxxxx'){
        $newCommentCount = Comment::find()->where(['remind'=>0,'status'=>1])->count();//未提醒的新評論 (remind提醒控制,status稽核控制)
        if($newCommentCount > 0){
            $content = '您有'.$newCommentCount.'條新評論!請稽核!';
            $newCommentCount = sprintf('%08d',$newCommentCount);//格式化輸出給變數;不同於printf格式化輸出到螢幕,可以重定向
            $sendMessage = new SendTemplateSMS();//傳送簡訊介面
            $sendMessage = $sendMessage->send_message($mobile,$newCommentCount);
            if($sendMessage){//傳送成功
                Comment::updateAll(['remind'=>1]);//把提醒標誌全部設為已提醒
                echo '['.date('Y-m-d h:i:s',time()).']'.$content.'['.strlen($content).']'."\r\n";//記錄日誌
            }else{//傳送失敗
                var_dump($sendMessage);
                return 0;
            }
        }else{//不存在未提醒評論
            return 0;
        }
    }

相關文章