не срабатывает хук по cron

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

не срабатывает хук - cron_mailer.php рассылки анкет на почту

#1 12 сентября 2015 в 16:07
Добрый день друзья. Помогите решить проблему. У меня на сайте есть хук — cron_mailer.php. Он вручную запускается, все задачи делает, а автоматически по cron нет. Другие задачи по cron у меня работают нормально (Перевод пользователей между группами, Создание карты сайта и др.) Делаю вывод что какая-то ошибка в коде хука. Если не сложно посмотрите и посоветуйте пути решения — почему не запускается хук автоматически по cron. Спасибо.
ps разработчик не отвечает, поэтому решил тут спросить.

  1. <?php
  2.  
  3. class onDatingCronMailer extends cmsAction{
  4.  
  5. public function run(){
  6. /*echo "<pre>";
  7. print_r(cmsConfig::getInstance());
  8. echo "</pre>";
  9. die();*/
  10. if($this->options['mailing'] != 1){return;}
  11.  
  12. $db = cmsDatabase::getInstance();
  13. $from = cmsConfig::getInstance()->sitename." <".cmsConfig::getInstance()->mail_from.">";
  14. define(HOST, $_SERVER['HTTP_HOST']);
  15.  
  16. $sql = "SELECT startdate FROM cms_dating_mailer";
  17. $result = $db->query($sql);
  18. $startdate = $db->fetchAssoc($result);
  19.  
  20. if($this->options['city'] == 'default'){
  21. $cityexp = " AND ((u1.city IS NULL) OR (u1.city IS NOT NULL AND u2.city = u1.city))";
  22. }
  23. else{
  24. $cityexp = '';
  25. }
  26.  
  27. $sql_profiles = "SELECT a.user_id AS owner_id, u1.email, u2.avatar, ((YEAR(CURRENT_DATE) - YEAR(u2.birth_date)) - (RIGHT(CURRENT_DATE,5)<RIGHT(u2.birth_date,5))) AS age, u2.nickname, u2.id AS u2_id
  28. FROM cms_dating_userparams a
  29. LEFT JOIN cms_dating_userparams b ON b.i_am = a.seek_for AND b.user_id <> a.user_id
  30. INNER JOIN cms_users u1 ON u1.id = a.user_id
  31. LEFT JOIN cms_users u2 ON u2.id = b.user_id
  32. WHERE a.mailer = 1 AND u1.dating = 1 AND u2.dating = 1 AND u1.is_locked IS NULL AND u2.is_locked IS NULL AND u1.email <> '' AND (YEAR(CURRENT_DATE) - YEAR(u2.birth_date)) - (RIGHT(CURRENT_DATE,5)<RIGHT(u2.birth_date,5)) >= a.seek_age_from AND (YEAR(CURRENT_DATE) - YEAR(u2.birth_date)) - (RIGHT(CURRENT_DATE,5)<RIGHT(u2.birth_date,5)) <= a.seek_age_to AND a.seek_for = b.i_am $cityexp";
  33.  
  34. $result_profiles = $db->query($sql_profiles);// AND u2.date_reg > '$startdate[startdate]'{$cityexp}
  35. if (!$db->numRows($result_profiles)) {
  36. //если не нашлось ни одной подходящей анкеты, записываем дату запуска задачи в базу и выходим из функции
  37. $sql = "UPDATE cms_dating_mailer SET startdate = NOW(), count = '0', finished = '1'";
  38. $db->query($sql);
  39. return;
  40. }
  41.  
  42. //обновляем статус задачи
  43. $sql = "UPDATE cms_dating_mailer SET startdate = NOW(), count = '0', finished = '0'";
  44. $db->query($sql);
  45.  
  46. $profiles = array();
  47. while($row = $db->fetchAssoc($result_profiles)){
  48.  
  49. $i++;
  50. if(empty($profiles[$row['owner_id']]['ownerparams']['owner_id'])){$i = 0;}
  51.  
  52. $profiles[$row['owner_id']]['ownerparams']['owner_id'] = $row['owner_id'];
  53. $profiles[$row['owner_id']]['ownerparams']['email'] = $row['email'];
  54. $profiles[$row['owner_id']]['users'][$i]['u2_id'] = $row['u2_id'];
  55. $profiles[$row['owner_id']]['users'][$i]['login'] = $row['login'];
  56. $profiles[$row['owner_id']]['users'][$i]['avatar'] = $row['avatar'];
  57. $profiles[$row['owner_id']]['users'][$i]['age'] = $row['age'];
  58. $profiles[$row['owner_id']]['users'][$i]['nickname'] = $row['nickname'];
  59.  
  60. }
  61.  
  62. $letter_file = ('newprofiles.txt');
  63. $letter_path = PATH.'/system/controllers/dating/letters/'.$letter_file;
  64. $letter = file_get_contents($letter_path);
  65. $letter_title = $_LANG['LETTERTITLE'];
  66. $subject = $letter_title.' - '.cmsConfig::getInstance()->sitename;
  67.  
  68. $iter = 1;
  69. $profilecount = '0';
  70. foreach($profiles as $key => $value){
  71. $htmllist = "";
  72. foreach($profiles[$key]['users'] as $key1 => $value1){
  73. //если юзеров для письма не больше максимального кол-ва
  74. if($profilecount < $this->options['maillimit']){
  75. $avatar = html_avatar_image($profiles[$key]['users'][$key1]['avatar'], 'small');
  76. $avatar = str_replace("src=\"", "src=\"http://".HOST, $avatar);
  77. $htmllist .= "<div style='clear:both;margin-top:15px;overflow:hidden'>";
  78. $htmllist .= "<div style='border:solid 1px #E1E2E1;float:left;margin-right: 20px;padding:1px'><a href=\"http://".HOST."/users/".$profiles[$key]['users'][$key1]['u2_id']."\" target=\"_blank\">$avatar</a></div>";
  79. $htmllist .= "<div><a href=\"http://".HOST."/users/".$profiles[$key]['users'][$key1]['u2_id']."\" target=\"_blank\">".$profiles[$key]['users'][$key1]['nickname']."</a></div>";
  80. $htmllist .= "<div>".LANG_AGE.": ".$profiles[$key]['users'][$key1]['age']."</div>";
  81. $htmllist .= "</div>";
  82.  
  83. $profilecount++;
  84. }
  85. else{
  86. break(1);
  87. }
  88. }
  89. $profilecount = '0';
  90. $htmllist = "<div style='margin:20px 0 30px 0'>".$htmllist."</div>";
  91.  
  92. $user_letter = str_replace('cms_users', $htmllist, $letter);
  93. $user_letter = str_replace('{sitename}', cmsConfig::getInstance()->sitename, $user_letter);
  94.  
  95. $to = $profiles[$key]['ownerparams']['email'];
  96. $headers = 'MIME-Version: 1.0' . "\r\n";
  97. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  98. $headers .= "From: $from" . "\r\n";
  99. mail($to, $subject, $user_letter, $headers);
  100.  
  101. //размер пачки писем и паузы
  102. if($this->options['mailcount'] > 0 && $this->options['mailsleep'] > 0){
  103. if($iter == $this->options['mailcount']){
  104. sleep($this->options['mailsleep']);
  105. $iter = 1;
  106. }
  107. else{
  108. $iter++;
  109. }
  110. }
  111. }
  112.  
  113. //общее кол-во писем
  114. $fullcount = count($profiles);
  115.  
  116. $sql = "UPDATE cms_dating_mailer SET count = '$fullcount', finished = '1'";
  117. $db->query($sql);
  118.  
  119. }
  120.  
  121. }<?php
  122.  
  123. class onDatingCronMailer extends cmsAction{
  124.  
  125. public function run(){
  126. /*echo "<pre>";
  127. print_r(cmsConfig::getInstance());
  128. echo "</pre>";
  129. die();*/
  130. if($this->options['mailing'] != 1){return;}
  131.  
  132. $db = cmsDatabase::getInstance();
  133. $from = cmsConfig::getInstance()->sitename." <".cmsConfig::getInstance()->mail_from.">";
  134. define(HOST, $_SERVER['HTTP_HOST']);
  135.  
  136. $sql = "SELECT startdate FROM cms_dating_mailer";
  137. $result = $db->query($sql);
  138. $startdate = $db->
#2 12 сентября 2015 в 23:42
1-й совет — "портянку" — под спойлер.
2-й совет — убедитесь, что у вас Планировщик заданий на хостинге работает. instantcms.ru/blogs/stranyi-blog/kak-proverit-rabotaet-li-zadacha-cron.html
3-й совет — далеко не все скрипты, запускаемые вручную, запустятся от Планировщика (разные пути). Чтобы убедиться, что скрипт запускается, разместите внутри класса запись в файл (пример есть в упомянутой статье). Если все ок, потом удалите.
#3 12 сентября 2015 в 23:55


1-й совет — "портянку" — под спойлер.
2-й совет — убедитесь, что у вас Планировщик заданий на хостинге работает. instantcms.ru/blogs/stranyi-blog/kak-proverit-rabotaet-li-zadacha-cron.html
3-й совет — далеко не все скрипты, запускаемые вручную, запустятся от Планировщика (разные пути). Чтобы убедиться, что скрипт запускается, разместите внутри класса запись в файл (пример есть в упомянутой статье). Если все ок, потом удалите.

Странник

1. Сделал.
2. Работает — проверял, разные задачи, с разным временем — вот скрин
3. Сейчас попробую, отпишусь.
#4 13 сентября 2015 в 00:04

разместите внутри класса запись в файл (пример есть в упомянутой статье)

Странник

вот это не нашёл в вашей статье как сделать
#5 13 сентября 2015 в 00:17
***
#6 13 сентября 2015 в 00:19

Напомните пожалуйста, Андрей, когда вы ко мне обращались с данным вопросом?

kreator

Мне делал Till, а он не отвечает, к Вам не обращался. smile
#7 13 сентября 2015 в 00:22


  1. $fd = fopen("my_cron.txt","a");
  2. fwrite($fd, "Обращение к файлу - ".date("d.m.Y H:i")."\r\n");
  3. fclose($fd);
Если скрипт запустился от задачи крон, значит и в файл my_cron.txt (он создастся автоматически) будет сделана запись "Обращение к файлу" с текущим временем. В этот же файл можете вывести данные из класса, чтобы понять что почем.

Странник

Извините, но я не знаю как это применить и как разобраться, в какой файл воткнуть. Cron у меня работает корректно, мой хостер проверял, другие задачи тоже запускаются, я читал наш форум по cron, мое предположение что ошибка в скрипте.
#8 13 сентября 2015 в 00:25
Скажите мне, это не разработка kreator'а?
#9 13 сентября 2015 в 00:26
Странник

Мне сайт делал Till, компонент его, соответственно он все делал, а где он взял это скрипт cron_mailer.php я не могу сказать потому что не знаю.
#10 13 сентября 2015 в 00:34
Я так понял из фразы своего коллеги "

Напомните пожалуйста, Андрей, когда вы ко мне обращались с данным вопросом?

kreator:
что это его разработка и он на вас в обиде теперь?
В любом случае вам надо выцарапывать Тилла, чтоб отлаживал класс, раз уж взялся. Если пропал, нанимайте другого. Из ваших сообщений я понял, что с отладкой у вас напряженка.
#11 13 сентября 2015 в 00:39

что это его разработка и он на вас в обиде теперь?

Странник
нет, и надо продолжать. я перепутал
#12 13 сентября 2015 в 00:42

нет, и надо продолжать. я перепутал

kreator

скрипт рабочий, вручную работает-анкеты рассылает, автоматом нет, я думаю что ошибка в скрипте при связке с cron.
#13 13 сентября 2015 в 07:15
1. Открываете файл cron.php
2. В самом верху добавляете строку ini_set("display_errors", 1);error_reporting(E_ALL | E_STRICT | E_DEPRECATED);
3. Открываете сайт и переходите по адресу www.ваш_сайт/cron.php
4. Текст ошибки выкладываете сюда…
#14 13 сентября 2015 в 08:35


1. Открываете файл cron.php
2. В самом верху добавляете строку ini_set("display_errors", 1);error_reporting(E_ALL | E_STRICT | E_DEPRECATED);
3. Открываете сайт и переходите по адресу www.ваш_сайт/cron.php
4. Текст ошибки выкладываете сюда...

Pasha

вот это понятная инструкция, сейчас сделаю.
#15 13 сентября 2015 в 08:52

4. Текст ошибки выкладываете сюда...

Pasha

нет ошибок, чистый лист
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.