명령은 터미널에서는 작동하지만 crontab에서는 작동하지 않습니다.

명령은 터미널에서는 작동하지만 crontab에서는 작동하지 않습니다.

일부 백업 설정을 테스트하고 있습니다. 매분마다 crontab이 실행되도록 설정했습니다. 백업을 업로드할 machine2에 디스크가 마운트되어 있습니다.
폴더의 내용을 /home/user/important압축 important.tar.gz하고 tar.gz 파일을 machine2의 /mnt/backup2폴더로 옮겼습니다.

크론 탭 항목:

* * * * * tar -czvf /home/user/important/important.tar.gz /home/user/important && 
rsync -vzhe ssh /home/user/important/*.tar* machine2:/mnt/backup2

crontab에서는 실행되지 않습니다.

터미널에서 동일한 명령을 실행합니다. 그러면 작동합니다:

/home/user/important/
/home/user/important/a.txt
/home/user/important/test.txt
/home/user/important/this.txt
/home/user/important/is.txt
/home/user/important/important.tar.gz
/home/user/important/important.txt
/home/user/important/test1/
important.tar.gz

sent 9.85K bytes  received 35 bytes  19.76K bytes/sec
total size is 9.75K  speedup is 0.99

파일은 machine2의 /mnt/backup2 폴더에 수신됩니다.

crontab에서 작동하지 않는 이유에 대한 제안이 있으십니까? 저는 우분투를 실행하고 있습니다.

답변1

실제 문제가 무엇인지 알기는 어렵지만 시도해 볼 수 있는 몇 가지 방법이 있습니다.

  • 이 한 줄의 코드를 스크립트에 넣고 chmod -xcrontab에서 사용하십시오.

이렇게 하면 진행 중인 작업(예: set -x등)을 더 잘 제어할 수 있습니다.

  • 디버그 출력을 활성화하여 crontab 항목이 예상대로 작동하지 않는 원인을 확인하세요.
#!/bin/bash -x

또는 당신이 사용하는 경우sh

#!/bin/sh -x

아니면 직접 사용하세요 set -x.

권한이나 쉘 글로빙 문제일 수 있다고 생각하지만 스크립트로 해결할 수 없는 경우 다음을 수행해야 합니다.

script.sh &> script.log

따라서 cronjob으로 실행하면 무언가와 그것이 어떻게 실패했는지 명확하게 볼 수 있습니다.

  • 항목이 있는지 확인하세요.crontab

이것은 명백하지만 일부 사람들은 다음 crontab을 통해 직접 추가하는 대신 이 파일을 사용할 수 있습니다 crontab.

echo "job entry" | crontab -

또는 "일반적인" 방법이지만 텍스트 편집기를 열고 사용자가 작업/crontab 항목을 수동으로 복사하여 붙여넣기/입력해야 합니다...:

crontab

또는 이중 입력을 방지하는 방법을 선호하는 경우:

cronadd() {
if crontab -l | grep -wq -- "$@"; then
    :
else
    (crontab -l 2>/dev/null; echo "$@") | crontab -
fi
}

다음과 같이 사용할 수 있습니다.

cronadd "job entry here"

중복된 작업이 추가되는 것을 방지해야 하며 실제로 추가되었는지 확인할 수 있지만... crontab -l꼭 확인하세요.

답변2

모든 좋은 답변에 감사드립니다. 나는 다음까지 모든 것을 시도했습니다.

"권한 또는 쉘 글로빙 문제일 수 있지만 스크립트로 해결할 수 없는 경우 다음을 수행해야 합니다: script.sh &> script.log"

문제는 권한에 있습니다. sudo로 crontab을 실행 중인데 이로 인해 몇 가지 문제가 발생합니다. crontab에 명령을 추가하면 사용자로 실행됩니다.

관련 정보