Почему в моем crontab работает только одна команда wget?

15

Я хочу получать контент из PHP-скрипта на моем сервере два раза в день, изменяя переменную запроса, langчтобы указать, какой язык мы хотим, и сохранять этот контент в двух языковых файлах. Это мой 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"

Проблема в том, что выполняется только первая командная строка wget (или, если быть точным: записывается только один файл /path/to/file-sv.sql). Если я переключаю второй и третий ряд, /path/to/file-en.sqlвместо этого пишется. Первая строка всегда выполняется так, как ожидается, независимо от того, где она находится.

Затем я попытался использовать lynx -dump "http://mydomain.com/path/?lang=xx" > /path/to/file-xx.sqlбезрезультатно; все еще только первая линия рыси выполнена успешно. Даже смешивание wget и lynx не изменило этого!

Становится немного отчаянным! Я что-то пропустил? Есть тысячи статей о crontab (в сочетании с) wget или lynx, но, похоже, все они охватывают основные настройки и синтаксис. Кто-нибудь понял, что я делаю неправильно?

Спасибо
Александр

Александр Валлин
источник
Вы уверены, что когда вы заходите на mydomain.com/path/?lang=en что-то возвращается? Вы пробовали это из командной строки, чтобы увидеть, что происходит (wget -O - mydomain.com/path/?lang=en )?
Ториан
1
Я попытался бы стереть и воссоздать возврат каретки между 2 и 3.
Антониус Блох
Рекомендуется указывать полный путь к исполняемым файлам в crontab. Как: "/ usr / bin / wget". Я не думаю, что это поможет в вашем случае, так как один из крон работает.
Антониус Блох
Что отображается в журнале cron, когда это происходит?
бобы
@Torian: работает как шарм.
Александр Валлин

Ответы:

42

Попробуйте добавить новую строку в конце вашего crontab.

gelraen
источник
1
Ты находка! Это сделал это! Я бы проголосовал за тебя, если бы у меня была репутация. :)
Александр Валлин
1
@gelraen Но ... почему?
Самуил
2

В тексте что-то не так. Отредактируйте свой crontab в vim, затем покажите невидимых символов.

:set invlist

Вы должны увидеть и исправить это.

bahamat
источник
Неправильно как? Как мне отредактировать его в Vim? Я попытался переписать весь файл на тот случай, если при копировании возникнут проблемы.
Александр Валлин
@afEkenholm: как вы редактируете это сейчас?
Багамат
1
@bahamat:# crontab -e
Александр Валлин
@afEkenholm: сделай это:EDITOR=vim crontab -e
bahamat
@bahamat: все выглядит просто отлично. Есть фиолетовый $в конце каждой строки?
Александр Валлин
1

Попробуйте добавить редирект, чтобы отладить crontab (или прочитать корневую почту):

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

Также запустите 'wget -O /path/to/file-en.sql " http://mydomain.com/path/?lang=en "' из консоли.

Также используйте 'crontab -e' для проверки нового crontab.

Также попробуйте удалить неработающую строку и перепечатать ее с клавиатуры.

Сделайте резервную копию corntab и запустите команду:

crontab -l | crontab -
alvosu
источник
Добавление /tmp/crontab_ouptput 2> /tmp/crontab_errorработает только для первой строки. Запуск команды из консоли работает просто отлично. Переписал весь файл голыми руками, но ничего не изменилось.
Александр Валлин
Сделайте резервную копию crontab и попробуйте: crontab -l | кронтаб -
alvosu
Спасибо за усилия, @alvosu, но простой перевод строки сделал свое дело!
Александр Валлин
1

Я просто потратил некоторое время, пытаясь найти ответы на эти вопросы (добавление новых строк, удаление новых строк и т. Д.) В системе, в которой работает cronie . Наконец, обнаружена ошибка в cronie 1.5.3, которая выполняет только первое задание cron для каждого пользователя . Это исправлено в 1.5.4

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

Надеюсь, это сэкономит кому-то время ...

Йерун
источник