하루 중 특정 시간에 실행해야 하는 백업 스크립트가 있으므로 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
사용되므로 지원되지 않으므로 작동 합니다 .sh
bash
&>>
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
다를 수 있으므로 특별히 언급합니다 .crond
centos-6
- 배포판마다 구현이
답변3
다음 예와 같이 2보다 큼 기호를 사용하여 출력 정보를 로그 파일로 보낼 수 있습니다.
* * * * * /usr/bin/python /path/to/script.py >> /path/to/logfile/output.log
다음 링크에서 이 편리한 crontab 라인 생성기를 확인하세요.https://crontab-generator.org/