$()
для выполнения команды date
и возврата вывода %
с помощью\
2>&1
в конце для потоковой передачи stdout
и stderr
в этот файл журнала * * * * * echo "Test crontab log" > /tmp/crontab.log.$(date --utc +\%Y\%m\%d_\%H\%M\%SZ) 2>&1
ls -lh /tmp | grep log
-rw-rw-r-- 1 ubuntu ubuntu 17 May 4 05:06 crontab.log.20190504_050601Z
-rw-rw-r-- 1 ubuntu ubuntu 17 May 4 05:07 crontab.log.20190504_050701Z
Похоже, здесь на этот вопрос достаточно хорошо ответили:https://stackoverflow.com/a/38025686/15375140
По сути, /bin/sh
не является оболочкой входа в систему, поэтому по умолчанию он не будет исходным кодом .profile
. Вы можете изменить Dockerfile, чтобы он был источником вашего .profile
вручную, или вместо этого выполнить /bin/sh -l
.
К сожалению, обе эти опции требуют изменения исходного изображения, что во многих случаях нежелательно. Похоже, что вы можете сказать ему, чтобы он создал профиль, поместив свой сценарий профиля в переменную среды ENV, например ENV=~/.shrc
--, и это означает, что все, что вам нужно сделать, это изменить командную строку docker (или docker -compose, или все, что еще запускает ваш контейнер ). Например, для docker run
вы должны добавить параметр-e ENV='~/.shrc'