[ AelTHeGriN @ 31.08.2004. 22:15 ] @
Pokusavam napraviti skriptu koju ce pokretati (ana)cron, a koja ce mailati output dvije komande: hddtemp (koja prikazuje temperaturu diskova. Zapravo i nije namijenjena da se na taj nacin koristi, vec kao daemon na koji se spaja telnetom, no taj me aspekt ne zanima, vec samo zelim doznati temperaturu) i smartctl (odnosno smartd daemona koji prikazuje S.M.A.R.T. informacije o disku).

No problem je sto skripta stane (odnosno mail program ceka da zavrsim sa tipkanjem poruke).

Skripta je slijedeca (sad sam stavio samo onu za hddtemp, za smartctl je gotovo identicna):

Code:

#!/bin/bash
 
MAILTO="${MAILTO:-root}"
FQDN=`hostname -f`
 
cat > /tmp/hddtmp
/usr/sbin/hddtemp /dev/hda >> /tmp/hddtmp; /usr/sbin/hddtemp /dev/hdb >> /tmp/hddtmp
/usr/bin/mail -s "Daily report for $FQDN" $MAILTO < /tmp/hddtmp
rm /tmp/hddtmp


Inace, ona linija koja pocinje sa cat, u jednoj mail skripti sam vidio da tako treba stvoriti fajl, makar mi bas nije jasno zasto, no probao sam i bez nje i uvijek ista stvar.

Probao sam i s dodavanjem tocke u praznom redu (ona je kao neki znak za slanje poruke, jel tako?), no ni to nije pomoglo.

Da li netko zna u cemu grijesim, ja stvarno ne znam...
Hvala puno.
[ Jbyn4e @ 01.09.2004. 10:01 ] @
Citat:
AelTHeGriN:
/usr/bin/mail -s "Daily report for $FQDN" $MAILTO < /tmp/hddtmp
rm /tmp/hddtmp

Probaj....
Code:

/usr/bin/mail -s "Daily report for $FQDN" $MAILTO << EOF
`cat  /tmp/hddtmp`
EOF
rm /tmp/hddtmp

[ AelTHeGriN @ 01.09.2004. 17:56 ] @
Hvala ti puno, sada sve radi:)
Moze li mi netko objasniti u cemu sam grijesio, nikad ne znam s tim EOF signalima, to me uvijek muci:)
[ Dr:Lun @ 01.09.2004. 18:15 ] @
Signal ne mora da bude izricito EOF. Procitaj dokumentaciju za odredjeni shell. Predlazem knjigu "Unix do kraja", SAMS.
[ AelTHeGriN @ 01.09.2004. 19:41 ] @
Eh, sada opet ne radi, a bilo je najnormalnije radilo. Nego, ima li nekakve veze s tim editor, ja koristim pico. Mislio sam da mozda ostavlja nekakva prazna mjesta, prazne redove, no pokusao sam poslije s geditom i ista je stvar, skripta se ne izvrsava, samo stoji.

Novi kod izgleda ovako:

Code:

#!/bin/bash

MAILTO="${MAILTO:-root}"
FQDN=`hostname -f`

/usr/sbin/hddtemp /dev/hda > /tmp/hddtmp; /usr/sbin/hddtemp /dev/hdb >> /tmp/hddtmp
/usr/bin/mail -s "HDD report for $FQDN" $MAILTO << EOF
`cat /tmp/hddtmp`
EOF
rm /tmp/hddtmp


EDIT: Evo upravo sam shvatio da se poruka normalno salje dok sam spojen na internet, a dok nisam, ne zeli ga poslati, znaci sve je u redu sa skriptom. No ne znam u cemu je problem, mozda u route-u?
Ne znam gotovo nista o sendmailu, eximu i mail aplikacijama, nikada se nisam bavio time i sve sto trebam je da mi se ovaj mejl salje u localu.
[ random @ 01.09.2004. 19:59 ] @
Bez mnogo komplikovanja, dovoljno bi trebalo da je ovo:

Code:

#!/bin/bash

MAILTO="${MAILTO:-root}"
FQDN=`hostname -f`

/usr/sbin/hddtemp /dev/hda > /tmp/hddtmp
/usr/sbin/hddtemp /dev/hdb >> /tmp/hddtmp
/usr/bin/mail -s "HDD report for $FQDN" $MAILTO < /tmp/hddtmp
rm /tmp/hddtmp


I ovo tvoje bi moralo da radi, mada je

Code:
/usr/bin/mail -s "HDD report for $FQDN" $MAILTO << EOF
`cat /tmp/hddtmp`
EOF


malo rogobatno, obzirom da je dovoljno

Code:
/usr/bin/mail -s "HDD report for $FQDN" $MAILTO < /tmp/hddtmp


Mada bih ja to uradio još jednostavnije, bez tmp fajla, jer zaista nema nikakve potrebe. bash takođe treba izbeći kad se možemo izvući sa standardnom Bourne sintaksom (/bin/sh).

Code:

#!/bin/sh
MAILTO="${MAILTO:-root}"
FQDN=`hostname -f`
(/usr/sbin/hddtemp /dev/hda; /usr/sbin/hddtemp /dev/hda) | /usr/bin/mail -s "HDD report for $FQDN" $MAILTO
[ random @ 01.09.2004. 20:04 ] @
Sad baš htedoh da dodam da ti je problem najverovatnije u mail komandi, kad videh poslednji pasus. Verovatno je problem u konfiguraciji mail servera, ili u tome što nemaš svoju mašinu u /etc/hosts. U krajnjoj liniji prvo pogledaj log mail servera kad šalješ mail u lokalu a nisi na Internetu, pa ćeš videti u čemu je problem, i zašto poruka ne stiže.

P.S. Obzirom da ova poslednja varijanta skripta sadrži samo jedan red (pajp je tvoj prijatelj ;o)), zapravo ti i ne treba skript, samo stavi tu liniju u cron (ubaci samo MAILTO i FQDN vrednosti umesto promenljivih).
[ AelTHeGriN @ 02.09.2004. 00:07 ] @
@random

Hvala puno, budem probao pa javim rezultate...
Inace i mislio sam da odradim ovo bez fajla u /tmp-u, no ono je i tako bila "radna" verzija skripte koja je na tome ostala upravo zbog problema s mailerom:)
[ AelTHeGriN @ 02.09.2004. 01:00 ] @
Malo sam cesljao logove (/var/log/exim4 >mainlog i rejectlog; ostali poput mail.info, mail.err u /var/log direktoriju imaju 0 bajtova) i bas i ne razumijem sto mi kazuju.
Kada je poruka uspjesno poslana pise ovo:

Code:
2004-09-02 01:53:45 1C2evB-0000Nf-8t <= [email protected] U=root P=local S=420
2004-09-02 01:53:45 1C2evB-0000Nf-8t => aelthegrin <[email protected]> R=local_user T=mail_spool
2004-09-02 01:53:45 1C2evB-0000Nf-8t Completed


A kad poruka nije ispravno poslana umjesto ovog S=420 pisu neki drugi (razliciti) brojevi.

No shvatio sam da je stvar mozda u iptables. Kada se spojim na internet imam (uz razlicita pravila naravno) i definirano INPUT i OUTPUT lanac DROP (FORWARD lanac ne koristim i on je ACCEPT).
Kad se skinem, brisu se pravila, no ostaje mi po defaultu INPUT i OUTPUT DROP. Kada promijenim na ACCEPT (OUTPUT prije svega), onda sve radi. Izgleda da je ovo vjerojatno bio problem...