2017-05-03 4 views
0

트립 와이어 위반 여부를 확인하기 위해 매시간 루트별로 cron 작업을 실행했습니다. 위반 여부와 상관없이 매시간 이메일을 발송합니다. 위반이 있으면 보고서가 포함됩니다. 위반이 없으면 제목이있는 빈 이메일을 보냅니다. 스크립트 라인을 넣어 전에 마지막으로 크론의 경로를 설정Bash 스크립트가 없어야하는 경우에도 이메일을 보냅니다.

#!/bin/bash 

# Save report 
tripwire --check > /tmp/twreport 

# Count violations 
v=`grep -c 'Total violations found: 0' /tmp/twreport` 

# Send report 
if [ "$v" -eq 0 ]; then 
     mail -s "[tripwire] Report for `uname -n`" [email protected] < /tmp/twreport 
fi 
+1

공백 이메일을 보내는 경우 '/ tmp/twreport'가 비어있는 것 같습니다. 확실히'v'가 0으로 설정됩니다. 실제로 그 파일에 기록 된 것을 디버깅 할 것을 제안하십시오. – paxdiablo

+0

파일이 기록됩니다 - 위반 횟수가 0 회 또는 위반 횟수 x 회를 표시합니다. v는 0 또는 1입니다. 수동으로 실행하면 잘 작동하지만 cron에서만 작동하지 않습니다. – MarkH

+0

터미널과 cron 작업 사이에는 환경에 큰 차이가 있으므로 여기서 문제가 될 수 있습니다. 예를 들어보십시오 http://stackoverflow.com/questions/1972690/cannot-get-php-cron-script-to-run/1972763#1972763 – paxdiablo

답변

0

나는 코드를 변경하는 것이 좋습니다

if [ -f /tmp/twreport ] # Check file exists 
then 
v=$(grep -c '^Total violations found: 0$' /tmp/twreport) 
#Not suggested using legacy backticks 
if [ "$v" -eq 0 ]; then 
     mail -s "[tripwire] Report for $(uname -n)" [email protected] < /tmp/twreport 
fi 
fi 

에 :

여기 스크립트입니다. 같은

# Setting PATH 
PATH=/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/path/to/tripwire:/and/so/on 
# Now,set up the cron-job for the script 
0  11   *    *   0  /path/to/script 
0

시도가 전체 경로를 따옴표로 주변 및 사용

v="`/bin/grep -c 'Total violations found: 0' /tmp/twreport`" 

if [ "$v" == "0" ]; then # or = instead of == based on your shell 

이러한 검색어를 확인 작동하지 않는 경우

. 'found : 0'에 0보다 앞에 두 개의 공백이 표시됩니다.

+0

'''따옴표의 사용은'grep -c'가 항상 숫자를 출력하기 때문에 (따옴표로 고칠 수있는 공백이나 이상한 물건이 없다.) 문제가 아니다. – paxdiablo