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


105

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


답변:


158

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

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파일.


14
cron같은이다 sh: 그것은 하나의 프로그램을 선택하지 않습니다. 많은 구현이 있습니다. 가장 보편적 인 구현은 Vixie cron입니다. 나는 다른 사람의 (현재, 원본이 아닌) 저자입니다. 나는 대부분의 크론 데몬이 시스템을 사용한다고 생각 sh하지만, 그것이 허용되는지에 따라 달라질 수 있습니다 &>>. 일부 cron 데몬 (예 : 광산) SHELL=...에서는 crontab의 줄을 사용하여 cron 줄을 실행하는 쉘을 변경할 수 없습니다 . 당신에게 맞는 솔루션을 찾아서 다행입니다. 다른 사람들에게 효과가 있는지에 영향을 줄 수있는 많은 변수가 있음을 지적 할 가치가 있다고 생각했습니다.
dubiousjim

YYYY-MM-DD_hh-mm-sec출력 파일 이름 에 삽입 하여 모든 파일 이름이 다르고 다시 쓰지 않고 유지하는 방법은 무엇입니까?
Danijel


2
*/1 * * * * /home/ranveer/vimbackup.sh &>> /home/ranveer/vimbackup.log같은 일을합니다.
Yanick Girouard

5

면책 조항 [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

2
당신은 당신이하고자하는 경우 /etc/cron.d/example1명령은 다른 쉘을 사용, 당신은을 설정할 수 있습니다 SHELL=당신의 /etc/cron.d/example1설정 파일.
Trevor Boyd Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.