crontab 오류(MTA가 설치되지 않음)인데 >/dev/null 2>&1을 사용합니다.

crontab 오류(MTA가 설치되지 않음)인데 >/dev/null 2>&1을 사용합니다.

저는 Linux를 처음 사용하는 사용자입니다.

데이터베이스를 백업하기 위해 vagrant 사용자를 사용하여 crontab을 실행해 보았습니다.

* * * * * /usr/bin/mysqldump -h localhost -u root -p root mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz >/dev/null 2>&1

crontab을 실행하면 폴더에 백업 파일이 없습니다(권한 체계가 있는 백업/모두가 있습니다 755).

여기서 오류가 발생합니다./var/log/syslog

Aug 16 11:55:01 precise64 CRON[2213]: (vagrant) CMD (/usr/bin/mysqldump -h localhost -u root -p root mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz >/dev/null 2>&1)
Aug 16 11:55:01 precise64 CRON[2212]: (CRON) info (No MTA installed, discarding output)

그래서 나는 생각한다

  1. 권한 거부로 인해 crontab이 백업 파일을 생성할 수 없다는 문제입니다.
  2. MTA가 설치되어 있지 않지만 >/dev/null 2>&1비활성화된 crontab을 사용하여 이메일로 보내는 것에 관한 것입니다. 왜 오류가 발생합니까?

답변1

물론 실수는 메일 프로그램(sendmail, postfix 등)을 구현하고 활성화하지 않았다는 것입니다.

즉, 다른 질문은 >/dev/null 2>&1 이 경우 LAST 명령 gzip에만 적용/관련된다는 것입니다. 따라서 mysqldump에는 STDERR로 가는 특정 유형의 출력이 있어야 합니다.

당신이하고 싶은 일을 수행하는 올바른 방법은 다음과 같습니다.

 * * * * *  (command | command ) >/dev/null 2>&1

답변2

다음을 입력할 수 있습니다:

MAILTO=""

crontab 파일 시작 부분에 이렇게 하면 이메일 전송을 시도하지 못하게 됩니다.

답변3

명령을 실행하는 사용자가 출력이 기록되는 디렉터리에 속 crontab하고 권한이 있으면 해당 디렉터리에 쓸 수 없습니다. 이 문제를 해결할 수도 있습니다.vagrantroot755
sudo chown vagrant /var/backup/all

이것이 문제인지 확인하려면 파일에 써 보십시오 /tmp.

그러나 또 다른 문제가 있습니다. 이와 같은 명령은
mysqldump mydb | gzip > database.sql.gz >/dev/null 2>&1
데이터베이스 덤프를 database.sql.gz및 에 기록합니다 /dev/null. 오류 메시지를 표준 출력에
복사합니다 2>&1. 즉, 오류 메시지도 기록합니다 database.sql.gz. 압축된 데이터 사이에 오류 메시지 텍스트를 기록하므로 압축 파일이 손상됩니다. 표준 오류 스트림에 무언가를 쓸 때만 문제가 발생하므로 테스트하면 제대로 작동할 수 있습니다. stderr에 대한 출력은 단지 경고일 수 있지만 다른 모든 것은 작동합니다.

압축된 데이터베이스 덤프를 sql.gz 파일에 기록하고 여기에 오류를 기록하려고 한다고 가정합니다 /dev/null. 이렇게 하려면 출력 스트림을 별도로 유지하고 오류 스트림을 출력 스트림에 복사하지 마십시오. 다음과 같은 파일로 전달합니다.

mysqldump mydb | gzip > /var/backup/all/database_`date +%Y-%m-%d`.sql.gz 2>/dev/null

"(MTA가 설치되지 않음, 출력 삭제)"라는 오류 메시지는 오류 출력을 보낼 수 없음을 알려주는 cron입니다. /dev/null오류를 무엇으로 리디렉션하더라도 보낼 내용이 없기 때문에 이는 궁극적으로 문제가 되지 않습니다 . 하지만 현재 오류 메시지가 전송되고 있는 것 같습니다. 이를 통해 위의 결과를 확인할 수 있습니다.

관련 정보