다음은 두 개의 동일한 logrotate 구성 예입니다. 유일한 차이점은 postroate
두 번째 예에서 누락된 블록 입니다.>/dev/null 2>&1 || true
/var/log/nftables.log {
size +10M
maxage 30
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
/var/log/nftables.log {
size +10M
maxage 30
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service
endscript
}
>/dev/null 2>&1 || true
두 번째 예가 왜 나쁜지 궁금합니다. (제 생각에는 나쁜 것 같습니다.) 그것이 무엇인지 설명해 주시겠습니까 ?
각 문자의 의미는 >/dev/null
다음 2>&1
과 ||
같습니다 .true
답변1
이것이 기본 bash
구문입니다. man bash
Linux Shell 튜토리얼이나 책을 읽고 또 읽어야 합니다 .
하지만 여기 있습니다:
>/dev/null
STDOUT 스트림을 NULL(무한 데이터 싱크) 장치로 리디렉션하고 삭제합니다.
2>&1
STDERR 스트림을 STDOUT으로 리디렉션합니다(로 리디렉션됨 /dev/null
).
||
논리 OR 연산자입니다. 왼쪽 표현식이 ||
실패하는 경우에만(0이 아닌 값을 반환 $STATUS
) 오른쪽 표현식이 평가되어 ||
전체 표현식의 결과로 반환됩니다.
true
SUCCESS 만 반환하는 프로그램입니다 $STATUS
.
대체로 다음을 /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
의미합니다.
명령을 실행하고 출력 및 오류 메시지를 삭제합니다. 명령이 성공하면 SUCCESS가 반환됩니다. 명령이 실패하면 SUCCESS가 반환됩니다.
참고: 이 명령은 가 아닌 postrotate
으로 해석되므로 bash 확장 기능은 작동하지 않습니다./bin/sh
/bin/bash