cron 내에서 출력을 파일로 리디렉션하는 방법은 무엇입니까? 항목에서 둘 다 stderr and stdout로그 파일로

하루 중 특정 시간에 실행 해야하는 백업 스크립트가 cron있으므로이 작업에 사용하고 있으며 cron 내에서 백업 스크립트의 출력을로 리디렉션하려고합니다 logfile.

crontab -e

*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log

위의 cron 항목에서 둘 다 stderr and stdout로그 파일로 리디렉션 합니다.

위의 cron 작업은에 따라 정상적으로 실행 syslog 되며 backup.sh파일에 언급 된 작업을 수행 하지만 로그 파일에는 아무것도 쓰지 않습니다.

/var/log/syslog

Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)

cli에서 스크립트를 실행하면 필요에 따라 작동하고 출력이 로그 파일에 기록됩니다

ranveer@ranveer:~$ ./backup.sh &>> backup.log 
ranveer@ranveer:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied
-------------------------------------------------------------------------------------
ranveer@ranveer:~$ 

따라서 파일 출력이 cron 내에서 파일로 리디렉션되지 않는 이유는 무엇입니까?



답변

나는 문제를 해결했다. 두 가지 방법이 있습니다.

M1

리디렉션을에서 (으) &>>로 변경하십시오 2>&1. 그래서 지금 crontab -e처럼 보인다

*/1 * * * * /home/ranveer/vimbackup.sh >> /home/ranveer/vimbackup.log 2>&1

나는 생각 하기 때문에 기본적으로 위의 작품을 cron사용하는 sh대신 작업을 실행할 수 bash있도록 &>>지원되지 않습니다 sh.

M2

추가하여 기본 쉘을 변경 SHELL=/bin/bashcrontab -e파일.


답변

면책 조항 [1].

@RanRag의 답변에 각주 또는 부록을 추가하고 싶습니다 .

쉘 재 지정 구문이에 맞는지 확인하십시오 /bin/sh. 유효하지 않은 쉘 리디렉션 구문을 사용하려고하면 /bin/sh명령이 실패하고 cron 작업이 실행되지 않습니다.

당신의에서 /etc/cron.d/example1설정 파일 당신이 아닌 다른 사용자를 지정하면 root해당 사용자의 로그인 쉘은 아닙니다 /bin/bash에서 … 당신은 여전히 사용해야합니다 / 빈 / SH 구문 /etc/cron.d/example1명령.


예를 들어

사용자는 쉘이있는 경우 cshzsh또는 ksh자신의 로그인 쉘 설정합니다. 당신의에서 /etc/cron.d/example1설정 파일, 명령을 사용해야합니다 /bin/sh구문. 특히 모든 쉘 리디렉션은 /bin/sh구문 이어야 합니다.

에서 예를 들어 csh쉘 리디렉션 구문 을 사용하려고하면 /etc/cron.d/example1cron 작업이 실행되지 않습니다. 에 crond위치한 로그 파일 /var/log/cron은 명령이 실행되었다고 말해야하지만 명령이 실행되기 전에 명령이 구문 오류와 함께 오류를 발생시킵니다.

crond구문 오류에 대한 오류 메시지 는 어디에서 발생합니까?

에 오류가보고되지 않았습니다 /var/log/cron. crond대신 기본적으로를 사용하여 오류 메시지가 표시됩니다 mail. 따라서 /var/spool/mail/${USER}오류가 무엇인지 확인해야합니다 .

[1]

기권

  • 이 답변은 sysv시스템을 가정
  • systemd 정보가 다를 수 있습니다
  • 구체적으로이 정보는 centos-6배포판 에 대해 학습되었으며 다른 sysv배포판

    에는 적용되지 않을 수 있습니다.

    • centos-6다른 배포판 crond과 다른 구현이 있을 수 있기 때문에 구체적으로 언급 합니다.centos-6