sh 스크립트가 있습니다. crontab을 사용하여 어떻게 실행하나요?

sh 스크립트가 있습니다. crontab을 사용하여 어떻게 실행하나요?

다음 파일이 있습니다 execute-backup-from-container.sh. 파일 내용은 다음과 같습니다.

#!/bin/bash
FILE=minime.sql.`date +"%Y%m%d".gz`
CONTAINER='mysql_01'
SCRIPT_ON_CONTAINER='/container-mysql-dump.sh'

${OUTPUT}=$(docker exec ${CONTAINER} /$SCRIPT_ON_CONTAINER)

echo "=============="
echo "$CONTAINER:/$FILE"
echo "=============="
docker cp "$CONTAINER:/$FILE" backup-data/

실행할 때 crontab -e다음을 입력합니다.
0 5 * * 1 /home/me/projects/execute-backup-from-container.sh 이는 execute-backup-from-container.sh매일 오전 5시에 실행되어야 함을 의미합니다.
문제는 스크립트가 전혀 실행되지 않는다는 것입니다.
그렇다면 문제가 정확히 무엇입니까? 왜 실행하지 않습니까?

답변1

귀하의 항목에 해당하는 cron 필드의 의미는 다음과 같습니다.

minute:       0 
hour:         5 
day of month: * 
month:        * 
day of week:  1 
command:      /home/me/projects/execute-backup-from-container.sh

영어로 번역하면 다음과 같습니다. 월요일 아침 오전 5시(매월 아무 날이나).

실행을 원할 경우:

매일 오전 5시

그런 다음 다섯 번째 필드를 다음과 같이 만들고 싶습니다 *.

0 5 * * * /home/me/projects/execute-backup-from-container.sh

답변2

파일이 실행 가능으로 설정되어 있는지 확인하셨나요? 다음은 스크립트를 실행 가능으로 표시하는 예입니다.

$ ls -l test.sh
-rw-r--r-- 1 ahill ahill 0 Mar 23 19:30 test.sh
$ chmod +x test.sh
$ ls -l test.sh
-rwxr-xr-x 1 ahill ahill 0 Mar 23 19:30 test.sh

다음으로 확인해야 할 것은 환경이다. 기본적으로 크론 작업은 환경을 상속하지 않습니다. "수정"은 여기에서 설명됩니다.
기존 환경 변수를 사용하여 cron 명령을 실행하는 방법은 무엇입니까?

환경이 중요한 이유 중 하나는 cron이 bash를 찾지 못할 수도 있다는 것입니다! 바라보다: https://www.digitalocean.com/community/questions/why-is-cron-not-running-my-sh-script

그래도 알아낼 수 없다면 테스트를 해보겠습니다. 크론 작업을 다음으로 변경하세요.

0 5 * * * /home/me/projects/execute-backup-from-container.sh

도착하다:

0 5 * * * /home/me/projects/execute-backup-from-container.sh >> ~/script_errors.log 2>&1 

일어날 일: 다음에 cron이 작업을 시작할 때 결과 오류 메시지가 script_errors.log 텍스트 파일에 덤프됩니다. (script_errors.log 파일의 경로를 적절하다고 생각되는 경로로 변경하십시오. 단, 파일에 필수는 아니지만 경로가 존재하는지 확인하십시오.)

또한 OP에서 실제 문제가 될 수 있는 "컨테이너"라는 단어를 발견했습니다. 스크립트가 Docker 컨테이너 내부에 있는 경우 다음이 해결책이 될 수 있습니다.
https://www.ekito.fr/people/run-a-cron-job-with-docker/

답변3

모든 답변을 고려한 후 마지막 질문은 마지막 줄에 있습니다.

docker cp "$CONTAINER:/$FILE" backup-data/  

마지막 줄은

docker cp "$CONTAINER:/$FILE" docker-projects/mysql/backup-data/  

귀하의 지원에 감사드립니다.

관련 정보