셸 스크립트를 호출하는 Docker 컨테이너 내에서 cronjob을 실행하려고 합니다.
어제 온라인과 스택 오버플로를 검색했지만 실제로 작동하는 솔루션을 찾을 수 없습니다.
어떻게 해야 하나요?
P粉5638310522023-10-11 17:56:26
승인된 답변은 프로덕션 환경에서는 위험할 수 있습니다.
사용시CMD cron && tail -f /var/log/cron.log
时,cron进程基本上会分叉以便在后台执行cron
,主进程退出并让您在前台执行 tailf
. 백그라운드 크론 프로세스는 사용자가 알지 못하는 사이에 중지되거나 실패할 수 있으며, 컨테이너는 계속 자동으로 실행되며 오케스트레이션 도구는 컨테이너를 다시 시작하지 않습니다.
기본 쉘 리디렉션을 사용하여 다음과 같은 작업을 수행할 수 있습니다.
으아아아귀하의 CMD는 다음과 같습니다: CMD ["cron", "-f"]
하지만 루트가 아닌 사용자로 작업을 실행하고 싶다면 어떻게 해야 할까요?
P粉8181258052023-10-11 16:39:03
이미지에서 시작된 컨테이너가 작업을 실행하도록 crontab
을 이미지에 복사할 수 있습니다.
Important: docker-cron 문제 3< 中所述< /a>에서와 같이: 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 ubuntu cron -f
, cron "프런트엔드"에 대해) "docker ubuntu cron -f
아님 일해요
빌드 및 실행:
Eric이 댓글
에 추가되었습니다: 🎜"docker CMD
tail -f 출력 > 표시되지 않음 "을 참조하세요.
Jason Kulatunga의 자세한 내용(2021년 4월)은 "Docker에서 Cron 실행"을 참조하세요. Jason의 이미지 보기 기준:
AnalogJ/docker-cron
Dockerfile 설치 , 배포판에 따라 다름.
진입점이 초기화된 후 cronie
/crond
호출