셸 스크립트를 호출하는 Docker 컨테이너 내에서 cronjob을 실행하려고 합니다.
어제 온라인과 스택 오버플로를 검색했지만 실제로 작동하는 솔루션을 찾을 수 없습니다.
어떻게 해야 하나요?
승인된 답변은 프로덕션 환경에서는 위험할 수 있습니다.
사용시CMD cron && tail -f /var/log/cron.log时,cron进程基本上会分叉以便在后台执行cron,主进程退出并让您在前台执行 tailf . 백그라운드 크론 프로세스는 사용자가 알지 못하는 사이에 중지되거나 실패할 수 있으며, 컨테이너는 계속 자동으로 실행되며 오케스트레이션 도구는 컨테이너를 다시 시작하지 않습니다.
CMD cron && tail -f /var/log/cron.log
cron
tailf
기본 쉘 리디렉션을 사용하여 다음과 같은 작업을 수행할 수 있습니다.
귀하의 CMD는 다음과 같습니다: CMD ["cron", "-f"]
CMD ["cron", "-f"]
하지만 루트가 아닌 사용자로 작업을 실행하고 싶다면 어떻게 해야 할까요?
이미지에서 시작된 컨테이너가 작업을 실행하도록 crontab을 이미지에 복사할 수 있습니다.
crontab
Important: docker-cron 문제 3에서와 같이: cron 파일에는 CRLF가 아닌 LF를 사용하세요.
그의 Ekito/docker-cron에서 Running cron jobs with Docker” /github.com/julienboulay" rel="noreferrer">Julien Boulay을 참조하세요.
2>&12>&1이 무엇인지 궁금하시다면 Ayman Hourieh가 설명을 통해 설명해드립니다.
2>&1
그러나 cron이 죽으면 컨테이너 는 계속 실행됩니다 .
(Gaafar의 댓글 및 apt-getapt-get 설치를 덜 시끄럽게 만드는 방법을 참조하세요. : apt-get -y install -qq --force-yes cronapt-get -y install -qq --force-yes cron도 작동합니다)
apt-getapt-get 설치를 덜 시끄럽게 만드는 방법을 참조하세요.
apt-get
apt-get -y install -qq --force-yes cronapt-get -y install -qq --force-yes cron도 작동합니다)
apt-get -y install -qq --force-yes cron
As Nathan Lloyd가 에 댓글을 달았습니다:
또는 hugoShaka의 답변에 언급된 것처럼 작업 자체가 로그 파일이 아닌 stdout/stderr로 직접 리디렉션되는지 확인하세요.
마지막 Dockerfile 줄을
참조(cron -fcron -f,即cron“前台”)“docker ubuntu cron -f, cron "프런트엔드"에 대해) "docker ubuntu cron -f 아님 일해요
cron -fcron -f,即cron“前台”)“docker ubuntu cron -f, cron "프런트엔드"에 대해) "docker ubuntu cron -f 아님 일해요
cron -f
Eric이 댓글
"docker CMD”末尾的 tail -f 출력 > 표시되지 않음 "을 참조하세요.
CMD
tail -f
Jason Kulatunga의 자세한 내용(2021년 4월)은 "Docker에서 Cron 실행"을 참조하세요. Jason의 이미지 보기 기준:
AnalogJ/docker-cronDockerfile 설치 , 배포판에 따라 다름.
AnalogJ/docker-cron
진입점이 초기화된 후 cronie/crond 호출
cronie
crond
승인된 답변은 프로덕션 환경에서는 위험할 수 있습니다.
사용시
CMD cron && tail -f /var/log/cron.log
时,cron进程基本上会分叉以便在后台执行cron
,主进程退出并让您在前台执行tailf
. 백그라운드 크론 프로세스는 사용자가 알지 못하는 사이에 중지되거나 실패할 수 있으며, 컨테이너는 계속 자동으로 실행되며 오케스트레이션 도구는 컨테이너를 다시 시작하지 않습니다.기본 쉘 리디렉션을 사용하여 다음과 같은 작업을 수행할 수 있습니다.
으아아아귀하의 CMD는 다음과 같습니다:
CMD ["cron", "-f"]
하지만 루트가 아닌 사용자로 작업을 실행하고 싶다면 어떻게 해야 할까요?
이미지에서 시작된 컨테이너가 작업을 실행하도록
crontab
을 이미지에 복사할 수 있습니다.Important: docker-cron 문제 3에서와 같이:
cron
파일에는 CRLF가 아닌 LF를 사용하세요.그의 Ekito/docker-cron에서 Running cron jobs with Docker” /github.com/julienboulay" rel="noreferrer">Julien Boulay을 참조하세요.
으아아아
으아아아2>&1
2>&1
이 무엇인지 궁금하시다면 Ayman Hourieh가 설명을 통해 설명해드립니다.그러나
cron
이 죽으면 컨테이너 는 계속 실행됩니다 .(Gaafar의 댓글 및
apt-get
:apt-get
설치를 덜 시끄럽게 만드는 방법을 참조하세요.apt-get -y install -qq --force-yes cron
apt-get -y install -qq --force-yes cron
도 작동합니다)As Nathan Lloyd가 에 댓글을 달았습니다:
또는 hugoShaka의 답변에 언급된 것처럼 작업 자체가 로그 파일이 아닌 stdout/stderr로 직접 리디렉션되는지 확인하세요.
으아아아마지막 Dockerfile 줄을
로 바꿉니다. 으아아아하지만 루트가 아닌 사용자로 작업을 실행하고 싶다면 어떻게 해야 할까요?
참조(
”cron -f
cron -f
,即cron“前台”)“docker ubuntucron -f
, cron "프런트엔드"에 대해) "docker ubuntucron -f
아님 일해요으아아아 으아아아
Eric이 댓글
에 추가되었습니다: 🎜"docker
CMD
”末尾的tail -f
출력 > 표시되지 않음 "을 참조하세요.Jason Kulatunga의 자세한 내용(2021년 4월)은 "Docker에서 Cron 실행"을 참조하세요. Jason의 이미지 보기 기준:
AnalogJ/docker-cron
Dockerfile 설치 , 배포판에 따라 다름.진입점이 초기화된 후
으아악cronie
/crond
호출