URL: https://www.overclockers.at/linux/cron-script-problem_239297/page_1 - zur Vollversion wechseln!
ich habe hier ein script, das clamscan ausführt und den report als email an root sendet falls infizierte dateien gefunden wurden. die file liegt in /etc/cron.weekly/ und funktioniert auch wie gewünscht wenn ich es von hand (als root) ausführe. cron scheint das script aber nicht auszuführen (bin nicht sicher, zumindest kommen keine email reports rein)
es gäbe zwar die möglichkeit das script irgendwo hin zu verschieben und mit crontab -e das ausführen zu planen. ich würde aber gerne wissen, ob/wie ich das scipt ausführen lassen kann, wenn es in /etc/cron.weekly liegt.Code:#!/bin/bash # email subject SUBJECT="VIRUS DETECTED ON `hostname`!!!" # Email To ? EMAIL="root@localhost" # Log location LOG=/var/log/clamav/scan.log check_scan () { # Check the last set of results. If there are any "Infected" counts that aren't zero, we have a problem. if [ `tail -n 12 ${LOG} | grep Infected | grep -v 0 | wc -l` != 0 ] then EMAILMESSAGE=`mktemp /tmp/virus-alert.XXXXX` echo "To: ${EMAIL}" >> ${EMAILMESSAGE} echo "From: [email]alert@domain.com[/email]" >> ${EMAILMESSAGE} echo "Subject: ${SUBJECT}" >> ${EMAILMESSAGE} echo "Importance: High" >> ${EMAILMESSAGE} echo "X-Priority: 1" >> ${EMAILMESSAGE} echo "`tail -n 50 ${LOG}`" >> ${EMAILMESSAGE} sendmail -t < ${EMAILMESSAGE} fi } clamscan -r / --exclude-dir=/sys/ --quiet --infected --log=${LOG} check_scan
Geb einfach mal für alle Binaries die du aufrufst den kompletten Pfad an.
Du meinst grep, clamscan etc?
Genau, cron kennt die Umgebungsvariablen wie den Suchpfad deiner Shell nicht.
scheint zu funktionieren, danke
Weil man es so oft sieht... sowas:
Code:if [ `tail -n 12 ${LOG} | grep Infected | grep -v 0 | wc -l` != 0 ] then [...]
Code:if tail -n 12 "${LOG}" | grep -Fq Infected then [...]
Bin für alle vorschläge offen (ist ein copy-paste script aus dem internet)
edit:
funktioniert nicht wie gewünscht, mit dieser zeile werden auch emails gesendet wenn nichts gefunden wurde.Zitat von COLOSSUSCode:if tail -n 12 "${LOG}" | grep -Fq Infected then [...]
scheint gut zu funktionierenCode:#!/bin/bash # email subject SUBJECT="VIRUS DETECTED ON `hostname`!!!" # Email To ? EMAIL="root@localhost" # Log location LOG=/var/log/clamav/scan.log #Summary Lines SUMMARY="11" check_scan () { # Check the last set of results. If there are any "Infected" counts that aren't zero, we have a problem. local infectedCount=`tail -n 8 ${LOG} | grep "Infected files" | grep -o "[^ ]*$"` local linesToPrint=$(( $SUMMARY + $infectedCount )) if [ $infectedCount != 0 ] then EMAILMESSAGE=`mktemp /tmp/virus-alert.XXXXX` echo "To: ${EMAIL}" >> ${EMAILMESSAGE} echo "From: [email]alert@domain.com[/email]" >> ${EMAILMESSAGE} echo "Subject: ${SUBJECT}" >> ${EMAILMESSAGE} echo "Importance: High" >> ${EMAILMESSAGE} echo "X-Priority: 1" >> ${EMAILMESSAGE} echo "`tail -n $linesToPrint ${LOG}`" >> ${EMAILMESSAGE} sendmail -t < ${EMAILMESSAGE} fi } /usr/bin/clamscan -r / --exclude-dir=/sys/ --quiet --infected --log=${LOG} check_scan
Und statt
könntest du zur besseren Lesbarkeit auch das schreiben:Code:EMAILMESSAGE=`mktemp /tmp/virus-alert.XXXXX` echo "To: ${EMAIL}" >> ${EMAILMESSAGE} echo "From: [email]alert@domain.com[/email]" >> ${EMAILMESSAGE} echo "Subject: ${SUBJECT}" >> ${EMAILMESSAGE} echo "Importance: High" >> ${EMAILMESSAGE} echo "X-Priority: 1" >> ${EMAILMESSAGE} echo "`tail -n 50 ${LOG}`" >> ${EMAILMESSAGE} sendmail -t < ${EMAILMESSAGE}
Oder auch das ganze mktemp auslassen und gleichCode:EMAILMESSAGE=$(mktemp /tmp/virus-alert.XXXXX) cat <<-EOF > "${EMAILMESSAGE}" To: ${EMAIL} From: [email]alert@comain.com[/email]" Subject: ${SUBJECT} Importance: High X-Priority: 1 $(tail -n 50 ${LOG}) EOF sendmail -t < "${EMAILMESSAGE}"
schreiben aber da bin ich mir grad ned sicher, kanns ned ausprobierenCode:cat <<-EOF | sendmail -t [...]
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025