Dlaczego w moim crontabie działa tylko jedno polecenie wget?

15

Chcę pobierać treść ze skryptu PHP na moim serwerze dwa razy dziennie, zmieniając zmienną zapytania, langaby ustawić żądany język, i zapisuję tę zawartość w dwóch plikach specyficznych dla tego języka. Oto mój crontab:

*/15 * * * * ~root/apache.sh > /var/log/checkapache.log
10 0 * * * wget -O /path/to/file-sv.sql "http://mydomain.com/path/?lang=sv"
11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en"

Problem polega na tym, że wykonywana jest tylko pierwsza linia komend wget (a ściślej: jedynym zapisywanym plikiem jest /path/to/file-sv.sql). Jeśli zmienię drugi i trzeci wiersz, /path/to/file-en.sqlzamiast tego zostanie napisane. Pierwszy wiersz zawsze działa zgodnie z oczekiwaniami, bez względu na to, gdzie się znajduje.

Potem spróbowałem użyć lynx -dump "http://mydomain.com/path/?lang=xx" > /path/to/file-xx.sqlbezskutecznie; wciąż tylko pierwsza linia rysia została wykonana pomyślnie. Nawet mieszanie wgeta i rysia tego nie zmieniło!

Trochę desperaci! Czy coś brakuje? Istnieją tysiące artykułów na temat crontab (w połączeniu z) wget lub lynx, ale wszystkie wydają się obejmować podstawowe ustawienia i składnię. Czy ktoś ma pojęcie o tym, co robię źle?

Dzięki,
Alexander

Alexander Wallin
źródło
Czy na pewno za każdym razem, gdy uzyskujesz dostęp do mydomain.com/path/?lang=en, coś jest zwracane? próbowałeś tego z wiersza poleceń, aby zobaczyć, co się dzieje (wget -O - mydomain.com/path/?lang=en )?
Torian
1
Spróbowałbym wymazać i odtworzyć powrót karetki między 2 a 3.
Antonius Bloch
Najlepszą praktyką jest określenie pełnej ścieżki do plików wykonywalnych w crontab. Jak: „/ usr / bin / wget”. Nie sądzę, by to pomogło w twoim przypadku, ponieważ jeden z cronów działa.
Antonius Bloch
Co jest wyświetlane w dzienniku crona, kiedy to się dzieje?
fasola
@Torian: Działa jak urok.
Alexander Wallin

Odpowiedzi:

42

Spróbuj dodać znak nowej linii na końcu swojej tabeli.

gelraen
źródło
1
Jesteś darem niebios! To zrobiło! Głosowałbym za tobą, gdybym miał reputację. :)
Alexander Wallin
1
@gelraen Ale ... dlaczego?
Samuel
2

Coś jest nie tak z tekstem. Edytuj crontab w vimie, a następnie pokaż niewidzialne postacie.

:set invlist

Powinieneś być w stanie to zobaczyć, a następnie poprawić.

bahamat
źródło
Źle jak? Jak mogę go edytować w Vimie? Próbowałem przepisać cały plik na wypadek, gdyby wklejenie kopii spowodowało problemy.
Alexander Wallin
@afEkenholm: jak go teraz edytować?
bahamat
1
@bahamat:# crontab -e
Alexander Wallin
@afEkenholm: zrób to:EDITOR=vim crontab -e
bahamat
@bahamat: Wszystko wygląda dobrze. Masz fiolet $na końcu każdej linii?
Alexander Wallin
1

Spróbuj dodać przekierowanie, aby debugować plik crontab (lub przeczytaj pocztę główną):

11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en" > /tmp/crontab_ouptput 2> /tmp/crontab_error

Uruchom także „wget -O /path/to/file-en.sql„ http://mydomain.com/path/?lang=en ”z konsoli.

Użyj także „crontab -e” do sprawdzania poprawności nowego crontab.

Spróbuj także usunąć niedziałający wiersz i wpisz go ponownie z klawiatury.

Wykonaj kopię zapasową corntab i uruchom polecenie:

crontab -l | crontab -
alvosu
źródło
Dodanie /tmp/crontab_ouptput 2> /tmp/crontab_errordziała tylko dla pierwszego wiersza. Uruchomienie polecenia z konsoli działa dobrze. Przepisz cały plik gołymi rękami, ale nic się nie zmieniło.
Alexander Wallin
Wykonaj kopię zapasową crontab i spróbuj: crontab -l | crontab -
alvosu
Dzięki za wysiłki, @alvosu, ale prosta nowa linia załatwiła sprawę!
Alexander Wallin
1

Właśnie spędziłem trochę czasu na wypróbowaniu powyższych odpowiedzi (dodawanie nowych linii, usuwanie nowych linii itp.) Na systemie z systemem cronie . Wreszcie stwierdzono, że w cronie 1.5.3 występuje błąd, który wykonuje tylko pierwsze zadanie cron dla każdego użytkownika . Naprawiono to w wersji 1.5.4

https://github.com/cronie-crond/cronie/issues/30

Mam nadzieję, że to pozwoli komuś zaoszczędzić trochę czasu ...

Jeroen
źródło