Я использую ack
как часть скрипта bash для создания списка файлов MP4 из mysqldump. Файл дампа составляет около 15 МБ.
Вот моя строка:
ack -o "https??://cdn.host.com\S+?\.mp4" /home/me/.dump.sql > /home/me/.mp4-matches.txt
Отлично работает при запуске bash-скрипта вручную. Мы получаем это в .mp4-matches.txt
:
https://cdn.host.com/url/t_Foo/Foo.mp4
https://cdn.host.com/url/t_Bar/Bar.mp4
Но при запуске той же самой команды, что и cronjob, она создает пустой файл.
Я не могу понять, почему он не работает в cron.
Я попытался поиграться с PATH, SHELL и т. Д. В crontab, чтобы убедиться, что среда такая же, как при ручном запуске. Ничто не имело значения.
Я пытался использовать все жесткие пути в crontab для подтверждения /usr/bin/ack
просто чтобы быть уверенным. Не имеет значения.
Я пытался использовать bash -l
для запуска скрипта. Не имеет значения.
Что я делаю не так?
Изменения для получения дополнительной информации:
Я использую Debian 7, но я также тестировал Ubuntu 18.04, и там появляется та же проблема.
Сервер работает exim4, все работает. По адресу MAILTO об этой строке в cron ничего не отправляется.
Нет ничего в / var / log / syslog или / var / log / messages относительно ошибок от cron
Использование bash #!/bin/bash
В crontab нет знаков процента (%).
Crontab выглядит так:
MAILTO=myemail@address.com
BASH=/bin/bash
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
27 9 * * * /usr/bin/ack -o "https??://cdn.host.com\S+?\.mp4" /home/me/.dump.sql > /home/me/.mp4-matches.txt
Да, это мой crontab, а не root.
Нет файла .ackrc для чтения. Он не существует нигде в моей системе. find / -iname ".ackrc"
ничего не вернул.
Простое выражение "https://cdn.host.com/url/t_Foo/Foo.mp4"
по-прежнему возвращает пустой файл в cron.
И одинарные кавычки, и двойные кавычки создают пустой файл в cron.
STERR, кажется, тоже ничего не дает. При запуске /usr/bin/ack -o 'https://cdn.host.com/url/t_Foo/Foo.mp4' /home/me/.dump.sql > /home/me/.mp4-matches.txt 2> /home/me/.ackerror.txt
оба файла .mp4-match.txt и .ackerror.txt вернулись в виде 0 байтов.