2

필자가 작성한이 백업 스크립트로 인해 abit가 작동하지 않습니다. 스크립트의 목표는에 내 LAN에예약 된 배치 파일 백업

  1. 모닝콜 잠자는 PC를

  2. 실행 마이크로 소프트 SyncToy에 (cmd를 버전) 내가 설정 및 출력 결과를 쌍 모든 폴더를 동기화 할 로그 파일.

  3. 오류가있는 경우 로그 파일에 기록한 다음 mailsend.exe를 통해 나에게 전자 메일을 보내야합니다.

배치 파일은 Windows 7의 예약 된 작업으로 매일 밤 실행되도록 설정됩니다. 배치 파일의

내용 :

18/02/2013 - 6:02:16.40 - Success: Sync completed. 
    20/02/2013 - 6:05:25.71 - Success: Sync completed. 
    21/02/2013 - 6:07:14.27 - Success: Sync completed. 
    22/02/2013 - 6:02:56.34 - Success: Sync completed. 
    24/02/2013 - 6:01:49.97 - Success: Sync completed. 
    25/02/2013 - 6:01:35.14 - Success: Sync completed. 

로그가 작성되지 않았습니다 며칠이되었습니다 볼 수 있듯이 synctoy_error_log.txt

@ECHO OFF 
    SET /a RETRY=0 
    SET /a RETRIES=5 
    SET MAC=000c76****** 
    SET IP=192.168.0.8 
    SET SUBNET=255.255.255.0 
    SET PORT=7 

    ECHO %date% - %time% - Started sync. 

    :CHECK 
    PING -n 1 %IP% | find "bytes=">NUL 
    IF %ERRORLEVEL%==0 (
    GOTO SYNC 
    ) 
    IF %ERRORLEVEL%==1 (
    GOTO WAKE 
    ) 

    :WAKE 
    SET /a RETRY=%RETRY%+1 
    IF %RETRY% GEQ 6 (
    SET ERR_VAL=RETRY 
    GOTO ERROR 
    ) 
    ECHO Waking up \\NAS Attempt %RETRY%\5... 
    START C:\sync\wolcmd.exe %MAC% %IP% %SUBNET% %PORT% 
    timeout /T 30 /NOBREAK>NUL 
    GOTO CHECK 

    :SYNC 
    ECHO SyncToy is running... 
    "C:\Program Files\SyncToy 2.1\SyncToyCmd.exe" -R>C:\sync\synctoy_log.txt 
    IF %ERRORLEVEL% == 0 (
    ECHO %date% - %time% - Success: Sync completed.>>C:\sync\synctoy_error_log.txt 
    GOTO END 
    ) ELSE (
    SET ERR_LEV=%ERRORLEVEL% 
    SET ERR_VAL=SYNC 
    GOTO ERROR 
    ) 

    :ERROR 
    IF %ERR_VAL%==RETRY (
    ECHO Error: Failed to sync, retries exceeded. 
    ECHO %date% - %time% - Error: Failed to sync, retries exceeded.>>C:\sync\synctoy_error_log.txt 
    ) 
    IF %ERR_VAL%==SYNC (
    ECHO Error: SyncToy error (%ERR_LEV%). 
    ECHO %date% - %time% - Error: SyncToy error (%ERR_LEV%).>>C:\sync\synctoy_error_log.txt 
    ) 
    START C:\sync\mailsend.exe -to [email protected] -from [email protected] -ssl -attach synctoy_error_log.txt,text/plain,i -smtp smtp.googlemail.com -port 465 -sub SyncToy_log +cc +bc -v -auth-login -user [email protected] -pass examplepass 
    GOTO END 

    :END 
    EXIT 

내용. 예약 된 작업을 실행중인 PC와 내가 깨우고 자하는 PC는 현재 액세스 가능해야합니다.

내 오류 검사 등에서 내가 잘못하고있는 것이 있습니까?

나는 문제가 있음을 알리는 이메일을받지 못했지만 LAN에서 잠자기 PC를 분리하고 스크립트를 강제 시작하면 컴퓨터를 깨울 수 없다는 이메일을받습니다.

어떤 조언을 주셔서 감사합니다. 크게 호소합니다. 나는 이것이 가장 효율적인 스크립트가 아니라는 것을 알고 있지만, 내가 얻을 수있는 모든 것을 고르려고 노력하고있다.

+2

예약 된 작업에서 전자 메일을 보낼 수없는 권한 문제 일 수 있습니다. 전자 메일을 보내고 예약 된대로 실행되도록하는 간단한 배치 파일을 작성해 보았습니까? 그 부분이 작동하는지 확인하려면 어떻게해야합니까? 또한 배치 파일을 실행할 때마다 자체 로그에 기록하도록 시도 할 수 있으므로 적어도 해당 날짜에 실행 중임을 확인할 수 있습니다 (로그에 디버깅 메시지 몇 개를 뱉어 낼 수도 있으므로 얼마나 멀리 있는지 볼 수 있습니다). 도착). 또한 이벤트 로그를보고 작업 스케줄러가 오류를보고했는지 확인하십시오. –

+0

위대한 조언을 주셔서 감사합니다, 나는 앞서 가서 그것을 시도합니다. –

+0

"mailsend.exe"라인만으로 새로운 단순화 된 배치 파일을 만들었고 예약 된 작업을 통해 활성화하면 올바르게 작동합니다. 또한 배치 파일 자체에서 디버그 데이터를 캡처하는 새 로그 파일을 추가했습니다. 로그가 기록되지 않은 날에 활성화 될지 기다려야합니다. –

답변

0

어떤 계정에서 스크립트가 예약 된 작업으로 실행됩니까? 일반적으로 NT 계정 시스템은 네트워크 공유를 사용할 수 없으며 secpol에서 일괄 작업으로 로그온 할 수있는 사용자 계정으로 실행 해보십시오.

+0

관리자 계정으로 실행 중입니다. –

+1

클릭 시작 유형 secpol.msc 및 시작 - MSC 스냅인에서 "로컬 정책"을 선택 - "사용자 권한 할당"선택 - "배치 작업으로 로그온"을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오 - "사용자 또는 그룹 추가"를 클릭하십시오. 관련 사용자를 포함해야합니다. – peet

+0

@ rikki-b 시도 했습니까? – peet