1. Forum używa plików Cookies. Dowiedz się więcej o celu ich używania i możliwości zmiany ustawień Cookies w przeglądarce. Czytaj więcej...

ROZWIĄZANE CRON - brak wysyłki maili

Dyskusja w 'Hosting i domeny internetowe' rozpoczęta przez użytkownika kkk6969, 25 Styczeń 2016.

  1. kkk6969

    kkk6969 Początkujący

    Wiadomości:
    6
    Docenione treści:
    0
    Witam

    Posiadam hosting na home.pl - mam kłopot z wysyłką maili do zarejestrowanych użytkowników na poprzez stronę www.kwatery.org.pl. Maile wysyłane do użytkowników nie dochodzą do adresatów.

    Natomiast przy rejestracji nowy użytkownik dostaje maila z automatu ze się zarejestrował oraz później ze dodał obiekt.

    Kupiłem skrypt obsługujący stronę www.kwatery.org.pl. Jest tam plik

    CRON jest ustawiony w katalogu głównym strony. Strona jest w osobnym katalogu.

    Sprzedawca twierdzi że skrypt jest ok (cyt:Za e-mail odpowiada

    wywołanie harmonogramu CRON, najwyraźniej nie jest on wywoływany i

    wysyłka nie działa). Proszę o sprawdzenie na serwerze czy

    harmonogram Cron jest wywoływany i co jest przyczyną usterki?


    Odp z home to cyt: Uprzejmie wyjaśniam, że logi potwierdzają, że serwer prawidłowo realizuje CRONA. Należy sprawdzić czy skrypt nie zawiera błędnych danych. Jednym z błędów jest ścieżka, która nie istnieje:

    >

    > $path = "/home/nazwa_uzytkownika/public_html/domena.pl/";


    Zainstalowałem plik errors według wcześniejszego zalecenia czatu i wyszły błędy w pliku cron-10 min w linii 20:

    [17-Jan-2016 18:20:01 Europe/Warsaw] PHP Parse error: syntax error, unexpected '*' in /cron-10min.php on line 20 Linia 20 to:

    */10 * * * * wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php


    Nie jestem fachowcem w temacie i powoli wymiękam – proszę o pomoc.

    Pozdrawiam

    Krzysztof



    Zapis pliku cron-10min to:



    > > <?php

    > > /***********************************************************************

    > > * Avatec Framework - Wersja 3.0.2013 *

    > > * Copyright (c) 2010-2013 Avatec.pl. Wszystkie prawa zastrzeżone *

    > > * ------------------------------------------------------------------- *

    > > * @author: Grzegorz Miśkiewicz *

    > > * @version: 1.0 *

    > >

    > > ********************************************************************

    > > **

    > > */

    > >

    > > /**

    > > W przypadku, gdy wywołanie tego pliku następuje za pomocą:

    > > - lynx

    > > - wget

    > > - curl

    > >

    > > Ten parametr należy zostawić bez zmian. Gdy jednak skrypt ten jest

    > > wywoływany

    > > przez interpreter PHP (np. na NAZWA.PL) zmienna ta powinna mieć

    > > wartość dokładnej

    > > ścieżki np.

    > >

    > > */10 * * * * wget -O --spider

    > > http://www.kwatery.org.pl/cron/cron-10min.php

    > >

    > >

    > > $path = "/home/nazwa_uzytkownika/public_html/domena.pl/";

    > > **/

    > >

    > > $path = $_SERVER['DOCUMENT_ROOT'] . "/";

    > >

    > > /**

    > > Domyślny limit wysyłanych jednorazowo maili przy jednym

    > > uruchomieniu skryptu **/

    > >

    > > $limit = 50;

    > >

    > > file_put_contents($path . "logs/cron-10min.txt", "RUN AT

    > > [".date('Y-m-d H:i:s')."]\r\n" , FILE_APPEND);

    > > file_put_contents($path . "logs/cron-10min.txt", "Path Detected:

    > > ".$path."\r\n" , FILE_APPEND);

    > >

    > > include $path . "header.php";

    > >

    > > $maile = $sql->sqlExec("*" , SQLTABLE_MESSAGES , "WHERE

    > > msg_status='WAITING' LIMIT 0," . $limit);

    > >

    > > if(is_array($maile)) {

    > > foreach($maile as $item):

    > > $error = $kernel->sendMessage($item['msg_name'],

    > > $item['msg_email'], $item['msg_title'], $item['msg_text']);

    > > if( $error == true ):

    > > $sql->sqlUpdate(SQLTABLE_MESSAGES , "msg_status='SENDED',

    > > msg_sended=NOW()" , "msg_id='".$item['msg_id']."'");

    > > file_put_contents($path . "logs/cron-10min.txt", "[OK] Message

    > > ".$item['msg_id']." to address ".$item['msg_email']." has been

    > > sended successfully\r\n" , FILE_APPEND);

    > > else:

    > > file_put_contents($path . "logs/cron-10min.txt", "[ERROR]

    > > Message ".$item['msg_id']." to address ".$item['msg_email']." has

    > > not been sended becouse error occured\r\n" , FILE_APPEND);

    > > $sql->sqlUpdate(SQLTABLE_MESSAGES , "msg_status='ERROR'" ,

    > > "msg_id='".$item['msg_id']."'");

    > > endif;

    > >

    > > endforeach;

    > > } else {

    > > file_put_contents($path . "logs/cron-10min.txt", "\r\nNo E-mails to send.

    > > Ending...\r\n" , FILE_APPEND);

    > > }

    > >

    > > fclose ($fp);

    > > file_put_contents($path . "logs/cron-10min.txt", "\r\n\r\n" ,

    > > FILE_APPEND); ?>
     
  2. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Podsumowując, rozumiem że wiadomości wysyłane z poziomu skryptu umieszczonego na serwerze w home.pl nie są dostarczane do użytkowników?

    Najprawdopodobniej jest to spowodowane tym, że skrypt nie spełnia wymagań, które zostały jakiś czas temu wprowadzone w konfiguracji serwerów pocztowych. Bez spełnienia tych zasad, wiadomości wysyłane z serwera nie będę przepuszczane dalej.

    Więcej informacji na ten temat opisujemy tutaj: https://pomoc.home.pl/baza-wiedzy/formularz-kontaktowy-na-stronie-www-nie-wysyla-wiadomosci/
     
    kkk6969 lubi to.
  3. kkk6969

    kkk6969 Początkujący

    Wiadomości:
    6
    Docenione treści:
    0
    A i nie dopisałem, że wcześniej pisałem o tym na czacie z home.pl i podczas sprawdzania działania crona przez konsultanta wysyłka ruszyła i została jednorazowo wysłana.
    Tak samo było po zgłoszeniu mailowym. Minute przez udzieleniem odpowiedzi przez home.pl. wysyłka maili ruszyła jednorazowo.
     
  4. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    ciekawi mnie tylko log:
    Kod:
    [17-Jan-2016 18:20:01 Europe/Warsaw] PHP Parse error: syntax error, unexpected '*' in /cron-10min.php on line 20
    w home nie używamy zapisów typu:
    Kod:
    */10 * * * * wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
    od tego jest właśnie nazwa pliku np cron-5min.php i w tym pliku należałoby umieścić
    Kod:
    wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
    
     
    kkk6969 lubi to.
  5. kkk6969

    kkk6969 Początkujący

    Wiadomości:
    6
    Docenione treści:
    0
    Witam
    zamieniłem linijkę:
    */10 * * * * wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
    na
    wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php

    maile nie zostały wysłane i w pliku errors wyszły takie błędy:

    [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Warning: file_put_contents(//logs/cron-10min.txt) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: No such file or directory in /cron-10min.php on line 34
    [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Warning: file_put_contents(//logs/cron-10min.txt) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: No such file or directory in /cron-10min.php on line 35
    [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Warning: include(//header.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /cron-10min.php on line 37
    [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Warning: include() [<a href='function.include'>function.include</a>]: Failed opening '//header.php' for inclusion (include_path='.:/:/usr/local/php/pear5') in /cron-10min.php on line 37
    [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Fatal error: Call to a member function sqlExec() on a non-object in /cron-10min.php on line 39


    Twórca skryptu ponownie sprawdzał jego budowę i potwierdził jego poprawność.

    Nadto jak ręcznie wywołuję plik crona poprzez wklejenie w przeglądarkę zapis http://www.kwatery.org.pl/cron/cron-10min.php to maile zostają wysłane bez względu czy zapis w pliku cron jest taki
    */10 * * * * wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
    lub taki
    wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
     
  6. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    wklej całą zawartość pliku cron pomiędzy tagami: [ code ] i [ /code ] bez spacji będzie łatwiej go czytać, jednak tak jak wspomniano Ci w pomocy:
    Kod:
    $path = "/home/nazwa_uzytkownika/public_html/domena.pl/";
    jeśli masz podczepioną domenę pod dany katalog (na pewno przy separacji) to tu ma być
    Kod:
    $path = "/";
    
    chociaż w sumie masz to zakomentowane, jednak tak czy siak powinno być / w ścieżce.
    Po drugie zrób plik /logs/cron-10min.txt z prawami do zapisu.
     
    kkk6969 lubi to.
  7. kkk6969

    kkk6969 Początkujący

    Wiadomości:
    6
    Docenione treści:
    0
    Dziękuje za odpowiedz:
    Poniżej wkleiłem plik crona pomiędzy [ code ] i [ /code ]
    i zmieniłem ponownie na
    wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
    oraz
    $path = "/";

    plik crona był ustawiony do odczytu i zapisu nie jest odhaczone wykonanie

    jak na razie maile nie wysyłają się automatycznie
    po wywołaniu ręcznym wysyłają się (poprzez wklejenie w przeglądarkę zapis http://www.kwatery.org.pl/cron/cron-10min.php)


    Kod:
    <?php
    /***********************************************************************
    *                Avatec Framework - Wersja 3.0.2013                   *
    *   Copyright (c) 2010-2013 Avatec.pl. Wszystkie prawa zastrzeżone    *
    * ------------------------------------------------------------------- *
    * @author: Grzegorz Miśkiewicz                                        *
    * @version: 1.0                                                       *
    ***********************************************************************/
    /**
        W przypadku, gdy wywołanie tego pliku następuje za pomocą:
        - lynx
        - wget
        - curl
        Ten parametr należy zostawić bez zmian. Gdy jednak skrypt ten jest wywoływany
        przez interpreter PHP (np. na NAZWA.PL) zmienna ta powinna mieć wartość dokładnej
        ścieżki np.
            */ wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
        $path = "/home/nazwa_uzytkownika/public_html/domena.pl/";
    **/
        $path = "/";
    /**
        Domyślny limit wysyłanych jednorazowo maili przy jednym uruchomieniu skryptu
    **/
        $limit = 50;
        file_put_contents($path . "logs/cron-10min.txt", "RUN AT [".date('Y-m-d H:i:s')."]\r\n" , FILE_APPEND);
        file_put_contents($path . "logs/cron-10min.txt", "Path Detected: ".$path."\r\n" , FILE_APPEND);
        include $path . "header.php";
        $maile = $sql->sqlExec("*" , SQLTABLE_MESSAGES , "WHERE msg_status='WAITING' LIMIT 0," . $limit);
        if(is_array($maile)) {
            foreach($maile as $item):
                $error = $kernel->sendMessage($item['msg_name'], $item['msg_email'], $item['msg_title'], $item['msg_text']);
                if( $error == true ):
                    $sql->sqlUpdate(SQLTABLE_MESSAGES , "msg_status='SENDED', msg_sended=NOW()" , "msg_id='".$item['msg_id']."'");
                    file_put_contents($path . "logs/cron-10min.txt", "[OK] Message ".$item['msg_id']." to address ".$item['msg_email']." has been sended successfully\r\n" , FILE_APPEND);
                else:
                    file_put_contents($path . "logs/cron-10min.txt", "[ERROR] Message ".$item['msg_id']." to address ".$item['msg_email']." has not been sended becouse error occured\r\n" , FILE_APPEND);
                    $sql->sqlUpdate(SQLTABLE_MESSAGES , "msg_status='ERROR'" , "msg_id='".$item['msg_id']."'");
                endif;
            endforeach;
        } else {
            file_put_contents($path . "logs/cron-10min.txt", "\r\nNo E-mails to send. Ending...\r\n" , FILE_APPEND);
        }
        fclose ($fp);
        file_put_contents($path . "logs/cron-10min.txt", "\r\n\r\n" , FILE_APPEND);
    ?>
     
  8. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    spróbuj w pliku np cron-5min.php wpisać tylko:
    Kod:
    php /cron/cron-10min.php
     
    kkk6969 lubi to.
  9. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Dopiero teraz to zauważyłem. @kkk6969 spróbuj z sugestią zaproponowaną przez użytkownika @TheL w poprzednim poście. Nie sprawdziłem jak to wygląda u Ciebie na serwerze, ale według przedstawianych przez Ciebie adresów (np. http://www.kwatery.org.pl/cron/cron-10min.php) oraz na podstawie odwołań w zacytowanym kodzie można przypuszczać, że plik cron-10min.php znajduje się w podkatalogu na serwerze. Cykliczne uruchamianie (cron) na serwerach w home.pl uruchamia tylko odpowiednio nazwane pliki PHP, np. plik o nazwie „cron-5min.php” będzie wykonywany co 5 minut, począwszy od momentu opublikowania pliku w katalogu głównym serwera w home.pl.

    @kkk6969 spróbuj skorzystać z sugestii użytkownika podanej w poprzednim poście, musisz tylko utworzyć nowy plik o nazwie "cron-5min.php" i umieść go z odpowiednią zawartością w katalogu głównym serwera. Kod zaproponowany przez użytkownika @TheL spowoduje, że CRON będzie wywoływał co 5 minut skrypt znajdujący się w podkatalogu /cron/cron-10min.php

    Jeśli to nie zadziała to spróbuj umieścić zawartość pliku cron-10min.php w katalogu głównym serwera. CRON działa tylko w ramach skryptów umieszczonych w katalogu głównym.
     
    kkk6969 lubi to.
  10. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    Dodatkowe instrukcje odnośnie funkcjonowania CRONA w home.pl:

    Jeżeli dany skrypt PHP wykonuje się poprawnie, gdy wywoływany jest z poziomu przeglądarki, a nie dzieje się tak kiedy skrypt wywoływany jest w pliku cron, to sugerujemy przeniesienie treści skryptu do dowolnego innego pliku PHP i uruchamiania tego skryptu z pliku crona poleceniem wzorowanym na poniższym:
    Kod:
    <?php system('wget --delete-after http://konto.home.pl/plik.php'); ?>

    W przypadku, gdy wywoływany skrypt wymaga autoryzacji http:
    Kod:
    <?php system('wget --delete-after --user=UŻYTKOWNIK --password=HASŁO http://konto.home.pl/plik.php'); ?>

    W przypadku, gdy skrypt wywoływany jest z użyciem protokołu https:
    Kod:
    <?php system('wget --delete-after --no-check-certificate https://konto.home.pl/plik.php'); ?>

    Analogicznie z wykorzystaniem polecenia curl:
    Kod:
    <?php system('curl -f -s http://konto.home.pl/plik.php'); ?>

    W przypadku, gdy wywoływany skrypt wymaga autoryzacji http:
    Kod:
    <?php system('curl -f -s -u UŻYTKOWNIK:HASŁO http://konto.home.pl/plik.php'); ?>

    W przypadku, gdy skrypt wywoływany jest z użyciem protokołu https:
    Kod:
    <?php system('curl -f -s -k https://konto.home.pl/plik.php'); ?>
     
    kkk6969 lubi to.
  11. kkk6969

    kkk6969 Początkujący

    Wiadomości:
    6
    Docenione treści:
    0
    Dziekuję za pomoc

    Plik cron-10min znajduje się w katalogu głównym tj public_html a strona www.kwatery.org.pl znajduje się w katalogu.
    Utworzyłem nowy plik cron-5min (umieściłem go w katalogu głównym tj public_html i w środku wpisałem
    php /cron/cron-10min.php i niestety nic się nie dzieje.
    Teraz oba pliki cron-10min i cron-5min są w tym samym katalogu.

    Odnośnie Dodatkowe instrukcje odnośnie funkcjonowania CRONA w home.pl - to dla mnie czarna magia i na razie tego nie rozkminiłem o co chodzi - jak sprawdzić jak to u mnie działa?
    Pozdrawiam
    Krzysztof
     
  12. TheL

    TheL @Lider VIP Beta-tester

    Wiadomości:
    2 403
    Docenione treści:
    535
    plik cron-10min.php w takiej postaci może nie koniecznie się wykonać poprawnie, ja bym go przeniósł do katalogu cron a w głównym dał plik cron-10min.php o treści dokładnie takiej jak podawałem aby wykonał go interpreter php, sprawdzę to potem ale powinno to działać.
     
    kkk6969 lubi to.
  13. Mariusz

    Mariusz pomoc.home.pl Moderator forum

    Wiadomości:
    3 087
    Docenione treści:
    302
    @kkk6969 - plik cron-10min.php ze skryptem napisanym przez informatyka umieść w katalogu /cron/ tak jak wcześniej, aby można było go wywołać pod adresem: http://www.kwatery.org.pl/cron/cron-10min.php

    Następnie w katalogu głównym serwera, czyli /public_html/ umieść plik cron-5min.php z poniższą zawartością:
    PHP:
    <?php system('wget --delete-after http://www.kwatery.org.pl/cron/cron-10min.php'); ?>

    lub taką zawartością:
    PHP:
    <?php system('curl -f -s http://www.kwatery.org.pl/cron/cron-10min.php'); ?>


    Przyznaję szczerze, że piszę wszystko na podstawie materiałów z tematu, nie sprawdziłem tego na Twoim serwerze, daj znać czy się udało. Niebawem wszystkie dodatkowe informacje na temat crona dodamy również do naszej dokumentacji: pomoc.home.pl
     
    kkk6969 lubi to.
  14. kkk6969

    kkk6969 Początkujący

    Wiadomości:
    6
    Docenione treści:
    0
    :) Działa po ustawieniach jak wyżej - wszystkim dziękuje za pomoc :)
     

Poleć forum znajomym