cron에서 파일로 출력을 리디렉션하는 방법은 무엇입니까?

cron에서 파일로 출력을 리디렉션하는 방법은 무엇입니까?

하루 중 특정 시간에 실행해야 하는 백업 스크립트가 있으므로 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에서 파일로 리디렉션되지 않는 이유는 무엇입니까?

답변1

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

M1

리디렉션을 에서 로 변경 &>>합니다 2>&1. 이제 crontab -e다음과 같습니다.

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

나는 믿는다위의 방법은 기본적으로 실행 작업이 대신 cron사용되므로 지원되지 않으므로 작동 합니다 .shbash&>>sh

M2

SHELL=/bin/bash파일을 추가하여 기본 쉘을 변경하십시오 crontab -e.

답변2

면책조항[1].

각주나 부록을 추가하고 싶어요@RanRag의 답변.

셸 리디렉션 구문이 이를 준수하는지 확인하세요 /bin/sh. 잘못된 셸 리디렉션 구문을 사용하려고 하면 /bin/sh명령이 실패하고 크론 작업이 실행되지 않습니다.

구성 파일 에서 /etc/cron.d/example1그렇지 않은 사용자를 지정하고 root해당 사용자의 로그인 쉘이 /bin/bash...이 아닌 경우에도 명령에 /bin/sh 구문을 사용해야 합니다 /etc/cron.d/example1.


예를 들어

사용자에게 쉘 csh또는 zsh로그인 ksh쉘 세트가 있는 경우. 구성 파일 에서 /etc/cron.d/example1명령은 구문을 사용해야 합니다 /bin/sh. 특히 모든 쉘 리디렉션은 /bin/sh구문론적이어야 합니다.

csh크론 작업 에서 셸 리디렉션 구문을 사용 하려고 하면 /etc/cron.d/example1크론 작업이 실행되지 않습니다. crond찾은 로그 파일은 /var/log/cron명령이 실행되었음을 나타내야 하지만 명령이 실행되기 전에 명령에서 구문 오류가 발생합니다.

crond구문 오류 오류 메시지는 어디에 발행됩니까 ?

이 버그는 에서 보고된 적이 없습니다 /var/log/cron. crond대신 기본적으로 모든 오류 메시지가 표시됩니다 mail. 따라서 /var/spool/mail/${USER}정확히 무엇이 오류인지 확인해야 합니다 .

[1]

부인 성명

  • 이 답변은 sysv시스템 을 가정합니다.
  • systemd정보는 다를 수 있습니다
  • 특히 이 정보는 centos-6배포판에 대해 학습되었으며 다른 sysv배포판 에는 적용되지 않을 수 있습니다.
    • 배포판마다 구현이 centos-6다를 수 있으므로 특별히 언급합니다 .crondcentos-6

답변3

다음 예와 같이 2보다 큼 기호를 사용하여 출력 정보를 로그 파일로 보낼 수 있습니다.

* * * * * /usr/bin/python /path/to/script.py >> /path/to/logfile/output.log

다음 링크에서 이 편리한 crontab 라인 생성기를 확인하세요.https://crontab-generator.org/

관련 정보