/**
  * This command echoes what you have entered as the message.
  * @param string $message the message to be echoed.
  */
 public function actionIndex()
 {
     Yii::info('CronController', 'cronjob');
     /**
      * If cron execute it the default date and time are wrong,
      * this fix it (date_default_timezone_set)
      */
     $settingModel = Setting::find()->where(['name' => 'date_default_timezone'])->one();
     if (isset($settingModel->data) and !empty($settingModel->data)) {
         date_default_timezone_set($settingModel->data);
     }
     $modelCronjob = new Cronjob();
     $modelCronjob->cron();
 }
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Cronjob::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'recurrence_week' => $this->recurrence_week, 'recurrence_month' => $this->recurrence_month, 'recurrence_year' => $this->recurrence_year, 'job' => $this->job, 'job_id' => $this->job_id, 'task_id' => $this->task_id, 'rule_id' => $this->rule_id, 'start_at' => $this->start_at, 'end_at' => $this->end_at, 'run_at' => $this->run_at, 'weight' => $this->weight, 'created_at' => $this->created_at, 'updated_at' => $this->updated_at]);
     $query->andFilterWhere(['like', 'name', $this->name])->andFilterWhere(['like', 'description', $this->description])->andFilterWhere(['like', 'recurrence_minute', $this->recurrence_minute])->andFilterWhere(['like', 'recurrence_hour', $this->recurrence_hour])->andFilterWhere(['like', 'recurrence_day', $this->recurrence_day]);
     //->andFilterWhere(['like', 'job', $this->job]);
     return $dataProvider;
 }
Пример #3
0
 /**
  * This function is call by app\commands\CronController, 
  * the CronController is call by the server cron
  */
 public function cron()
 {
     $models = Cronjob::find()->orderBy('weight')->all();
     // define date, and floor to 5 minutes
     $now = date('Y-m-d H:i:00', floor(time() / (5 * 60)) * (5 * 60));
     foreach ($models as $model) {
         // check start_at and end_at is between date now
         if ($model->start_at <= $now and ($model->end_at >= $now or empty($model->end_at))) {
             // add the cronjob time to the run_at, and check if it has to run (has to be lower or equal than now)
             $run_at = $model->run_at;
             $run_at = date('Y-m-d H:i:s', strtotime('+' . $model->recurrence_minute, strtotime($run_at)));
             $run_at = date('Y-m-d H:i:s', strtotime('+' . $model->recurrence_hour, strtotime($run_at)));
             $run_at = date('Y-m-d H:i:s', strtotime('+' . $model->recurrence_day, strtotime($run_at)));
             $run_at = date('Y-m-d H:i:s', strtotime('+' . $model->recurrence_week, strtotime($run_at)));
             $run_at = date('Y-m-d H:i:s', strtotime('+' . $model->recurrence_month, strtotime($run_at)));
             $run_at = date('Y-m-d H:i:s', strtotime('+' . $model->recurrence_year, strtotime($run_at)));
             // check if it has to run
             if ($run_at <= $now) {
                 // check if the job is correct executed
                 $executed = call_user_func(array('app\\models\\' . ucfirst($model->job), 'cronjob'), $model->job_id);
                 // only update the cronjob if the job is executed correctly
                 //if($executed){
                 // update run_at
                 //$model = Cronjob::findOne($model->id);
                 $model->run_at = $now;
                 if (!$model->save()) {
                     print_r($model->errors);
                 }
                 //}
             }
         }
     }
 }
 /**
  * Finds the Cronjob model based on its primary key value.
  * If the model is not found, a 404 HTTP exception will be thrown.
  * @param integer $id
  * @return Cronjob the loaded model
  * @throws NotFoundHttpException if the model cannot be found
  */
 protected function findModel($id)
 {
     if (($model = Cronjob::findOne($id)) !== null) {
         return $model;
     } else {
         throw new NotFoundHttpException('The requested page does not exist.');
     }
 }