Cron: 내 crontab이 전혀 아무것도 하지 않는 것 같습니다.

Cron: 내 crontab이 전혀 아무것도 하지 않는 것 같습니다.

뭔가 빠진 것 같아요. 일부 백업을 처리하기 위해 SSH를 통한 rsync를 처리하기 위해 사무실에 일부 crontab을 설정했지만 해당 문제에 대해 실행되거나 로깅되지 않는 것 같습니다. 내가 뭐 놓친 거 없니?

이것은 내 크론탭입니다:

0 2 * * * idealm /usr/bin/local/rsync -avz --rsync-path=/usr/bin/rsync -e ssh /Ideal\ Machinery\ Database/* [email protected]:~/db_backup >> /home/idealm/Work/cron_log.txt

^ Mac Mini 서버에서 SME 서버로

0 2 * * * i /usr/bin/rsync -avz --rsync-path=/usr/local/bin/rsync -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/Converted\ Warehouse\ Pictures/* [email protected]:/ideal_img >> /home/i/cron_log.txt

^ SME 서버에서 Mac Mini 서버로

0 2 * * * i /usr/bin/rsync -rvz -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/* fm-backup@[remote server]:/home/fm-backup/img_all/ >> /home/i/cron_log.txt

0 2 * * * i /usr/bin/rsync -rvz -e ssh ~/db_backup/* fm-backup@[remote server]:~/db_backup/ >> /home/i/cron_log.txt

^ SME 서버에서 Ubuntu 10.10을 실행하는 원격 서버로(여기서 [remoteserver]는 검토 주소임)

문제는 bash에서 이러한 작업을 실행할 때 모든 것이 잘 실행된다는 것입니다. cron이 작동하지 않는 것 같습니다. 어떤 제안이 있으십니까?

답변1

먼저 몇 가지 간단한 cronjob을 시도하고 여기에서 빌드하십시오.

0 12 * * * user echo 'Hello, World!' >> /tmp/test.log 2>&1
1 12 * * * user ssh anotheruser@anotherhost ls >> /tmp/test.log 2>&1
2 12 * * * user rsync -e ssh anotheruser@anotherhost:/path/to/small/dir /tmp/test-dir >> /tmp/test.log 2>&1

처음에는 너무 많은 옵션을 사용하지 마십시오. 그러나 2>&1오류 메시지를 받으려면 사용이 중요합니다. 2>/tmp/test-error.log를 사용하여 별도의 파일로 보낼 수도 있습니다 . 일반적으로 cron은 출력이 있는 경우에만 이메일을 생성합니다. 이메일은 crontab에 설정된 MAILTO 환경 변수에 언급된 이메일 주소나 로컬 Unix 사용자에게 전송되며 MAILTO가 설정되지 않은 것처럼 작업이 실행됩니다. 메일 서버가 설치되어 있지 않거나 액세스 방법을 잘 모르는 경우 모든 출력을 파일로 리디렉션할 수 있습니다. 주목해야 할 또 다른 사항은 SHELL을 설정하는 것입니다. 기본적으로 cron은 /bin/sh를 사용하는데 이는 일반적으로 괜찮고 일부 시스템에서는 /bin/bash에 대한 심볼릭 링크일 수도 있지만 그렇지 않은 경우 명령에 bash-isms를 사용하려면 추가하거나 SHELL=/bin/bash다른 항목을 작업에 적용할 수 있습니다. 전에 상장.

위의 crontab에서 볼 수 있는 또 다른 문제는 공백입니다. 이러한 명령은 일반 셸에서 작동하므로 문제가 되지 않을 수 있지만 일부 원격 ssh 명령을 사용할 때 공백에 주의하세요. 예를 들어 다음과 ssh server ls "Music Videos"같은 명령의 공백은 로컬 셸과 원격 셸 모두에서 이중 이스케이프되어야 하기 때문입니다. 쉘이 그것들을 설명할 수 있습니다. 올바른 명령은 다음과 같아야 합니다. ssh server ls "Music\\ Videos"또는ssh server ls '"Music Videos"'

내가 생각할 수 있는 마지막 것은 SSH 인증 실패입니다. 공개 키 인증을 사용하고 있다고 가정합니다. 공개 키는 어디에 저장되어 있나요? 암호화되지 않은 개인 키 입니까 ~/.ssh/id_rsa, 아니면 SSH 공개 키 에이전트에 로드됩니까? 디스크상의 복사본이 암호화되어 에이전트에 로드하는 경우 rsync가 실행될 때 실행될 에이전트를 가리키도록 crontab에서 SSH_AUTH_SOCK를 수동으로 설정했는지 확인해야 합니다. 나는 일반적으로 개인 키를 디스크에 암호화된 상태로 유지하고 고정 소켓 경로를 사용하여 백그라운드에서 ssh-agent를 실행합니다. 예를 들어 ssh-agent -a /tmp/user.agent다음을 실행하여 SSH_AUTH_SOCK=/tmp/user.agent ssh-add .ssh/id_rsa개인 키를 에이전트에 로드합니다. 개인 키를 잠금 해제하려면 비밀번호를 입력해야 하기 때문에 재부팅할 때마다 수동으로 실행하는 스크립트에 이 두 명령이 있습니다. 그런 다음 SSH_AUTH_SOCK=/tmp/user.agent자동화된 cronjob에서 사용할 수 있도록 crontab 파일에 이를 저장합니다.

관련 정보