Задача Cron внутри контейнера от хоста - PullRequest
1 голос
/ 11 января 2020

Я пытаюсь выполнить задачу cron внутри контейнера с хоста, но безуспешно. С хоста я добавляю следующую строку на crontab -e

* * * * * docker exec -it sample_container bash -c 'touch /selected/directory/temp$(date +%H-%M)'

Но это не работает. Интересно, что когда я запускаю команду независимо от crontab, она успешно выполняется. Кто-нибудь может объяснить, что мне здесь не хватает?

1 Ответ

1 голос
/ 11 января 2020

Примечание: при отладке таких проблем с помощью cron вы должны искать ошибки в вашей локальной системной почте или перенаправлять их в вашу реальную почту, добавив MAILTO=yourmail@yourdomain.com поверх вашего файла crontab.


Есть две проблемы с вашей командой crontab

TLDR; фиксированное выражение cron

* * * * * docker exec sample_container bash -c 'touch /selected/directory/temp$(date +\%H-\%M)'

% имеет специальное значение в crontab

From man -s 5 crontab

Знаки процента (%) в команде , если не экранировано с помощью backsla sh (\), будет изменено на символы новой строки, и все данные после первого % будут отправлены в команду в качестве стандартного ввода.

Так вам нужно будет экранировать эти % знаки в строке формата даты

Cron не выделяет tty

Cron не выделяет tty, тогда как вы пытаетесь использовать один при выполнении вашей команды (то есть опция -t для docker exec). Поэтому команда завершится неудачно с ошибкой the input device is not a TTY

Вам не нужно ни go интерактивно (-i), ни выделять tty для этой команды, чтобы она все равно выполняла свою работу, поэтому вам придется отбросить эти опции для запуска из cron.

...