하루 중 특정 시간에 실행 해야하는 백업 스크립트가 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/bash
에 crontab -e
파일.
답변
면책 조항 [1].
@RanRag의 답변에 각주 또는 부록을 추가하고 싶습니다 .
쉘 재 지정 구문이에 맞는지 확인하십시오 /bin/sh
. 유효하지 않은 쉘 리디렉션 구문을 사용하려고하면 /bin/sh
명령이 실패하고 cron 작업이 실행되지 않습니다.
당신의에서 /etc/cron.d/example1
설정 파일 당신이 아닌 다른 사용자를 지정하면 root
해당 사용자의 로그인 쉘은 아닙니다 /bin/bash
에서 … 당신은 여전히 사용해야합니다 / 빈 / SH 구문 /etc/cron.d/example1
명령.
예를 들어
사용자는 쉘이있는 경우 csh
나 zsh
또는 ksh
자신의 로그인 쉘 설정합니다. 당신의에서 /etc/cron.d/example1
설정 파일, 명령을 사용해야합니다 /bin/sh
구문. 특히 모든 쉘 리디렉션은 /bin/sh
구문 이어야 합니다.
에서 예를 들어 csh
쉘 리디렉션 구문 을 사용하려고하면 /etc/cron.d/example1
cron 작업이 실행되지 않습니다. 에 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