scp가 cron에서 작동하지 않습니다

scp가 cron에서 작동하지 않습니다

네, 그게 고전이라는 걸 알아요. 나는 모든 것을 검색했지만 여전히 작동하지 않습니다. 다음 스크립트가 있습니다.

 #First go to SVN repo folder
cd $svnrepos


# Just make sure we have write access to backup-folder
if [ -d "$bakdest" ] && [ -w "$bakdest" ] ; then
  # Now $repo has folder names = project names
  for repo in *; do
    # do svn dump for each project
    echo "Taking backup/svndump for: $repo"
    echo "Executing : svnadmin dump $repo > $bakdest/$repo-$bakdate.svn.dump \n"
    # Now finally execute the backup
    svnadmin dump $repo > $bakdest/$repo-$bakdate.svn.dump
    # You can go an extra mile by applying tar-gz compression to svn-dumps

    # We also would like to save the dump to remote place/usb
      # USB/other directory exists, copy the dump there
      echo "Going to copy $repo dump to $baktousb directory...\n"
      /usr/bin/scp -v $bakdest/$repo-$bakdate.svn.dump $baktousb/$repo-$bakdate.svn.dump
  done
else
  echo "Unable to continue SVN backup process."
  echo "$bakdest is *NOT* a directory or you do not have write permission."
fi


# End of backup script
echo "\n\n================================="
echo " - Backup Complete, THANK YOU :-]"

셸에서는 모든 것이 잘 작동하지만 cron 작업으로 실행하면 scp가 전혀 수행되지 않습니다(그러나 백업은 생성됩니다). 예, 공허한 설명이 있습니다. 왜 작동하지 않는지 이해하지 못합니다.

답변1

문제는 ssh-agent대화형 환경에서 실행 중일 수 있지만 cron에서는 실행되지 않을 수 있으며 SSH 키 파일 이름이 기본 파일 이름과 다르다는 것입니다.

이 문제를 해결하려면 scp 명령줄에 SSH 키를 명시적으로 지정 scp -i $SSH_KEY_FILENAME하거나 ~/.ssh/config호스트에 적합한 항목을 지정하면 됩니다.

Host backuphost
    IdentityFile SSH_KEY_FILENAME

스크립트를 테스트하려면 스크립트를 통해 실행해 보세요 env -i /path/to/your/script. 그러면 환경이 재설정되고 cron 환경이 모방됩니다.

답변2

리눅스를 가정합니다.

1. cron 작업을 실행하기 위한 기본 셸은 매우 제한적입니다( sh). 다음 명령을 사용하여 스크립트를 시작합니다.

#!/bin/bash

2. cron 작업 STDOUT에서 STDERR시스템 메일을 리디렉션합니다 . 이메일을 확인.

3. 이 답변의 방법을 사용하여 스크립트를 확인하십시오.https://unix.stackexchange.com/a/56503/16841

4. cron 환경에서 PATH 변수와 호출한 모든 바이너리의 위치를 ​​확인합니다. 어디에 위치해 있나요 svnadmin? 전체 경로 이름을 사용하십시오.

관련 정보