Strona 1 z 1

Skrypt i cron - wykonywanie skryptu co trzy minuty

: 19 maja 2007, 21:26
autor: Kaka'
Witam,

mam problem ze skryptem i cronem. Mianowicie mam skrypt, który wysyła SMS'a gdy temperatura CPU, GPU i/lub twardziela będzie większa niż dana wartość. Ustawiłem w crontabie żeby skrypt wykonywał się co trzy minuty:

Kod: Zaznacz cały

kaka@debian:~$ crontab -l
# m h  dom mon dow   command
*/3 *   * * *   /home/kaka/check_temp  >/home/kaka/plik

kaka@debian:~$
A w /home/kaka/plik jest:

Kod: Zaznacz cały

kaka@debian:~$ cat plik
sob maj 19 21:27:02 CEST 2007
kaka@debian:~$
Czyli skrypt jednak się wykonuje, ale tylko do pewnej części.

/var/log/syslog nic nie mówi.

Nie wiem gdzie i czego szukać, po prostu ręce opadają mi.

Dodam jeszcze, że gdy wykonam ręcznie skrypt to jest wszystko ok:

Kod: Zaznacz cały

kaka@debian:~$ sh check_temp
kaka@debian:~$ ./check_temp
kaka@debian:~$
Poniżej zamieszcza skrypt:

Kod: Zaznacz cały

#!/bin/sh

strona="$(wget --timeout=5 -t 1 -q [url]http://www.miastoplusa.pl[/url] -O - 2>/dev/null)"
[ -z "$strona" ] && exit 1

date > /home/kaka/plik

GPU_temp="$(nvidia-settings -q gpucoretemp | sed '/Attribute/!d;{s/.*):\ //;s/\.//}' 2>/dev/null)"
HDD_temp="$(nc localhost 7634 | cut -d'|' -f4 2>/dev/null)"
CPU1_temp="$(< /sys/module/k8temp/drivers/pci:k8temp/0000:00:18.3/temp1_input)"
CPU2_temp="$(< /sys/module/k8temp/drivers/pci:k8temp/0000:00:18.3/temp3_input)"

tel_nr="123456789"

send_me_sms() {
        /usr/bin/sms -g miastoplusa -n ${tel_nr} -m "$info" 2>&1 >/dev/null
        return 0
}

for x in ${CPU1_temp:0:2} ${CPU2_temp:0:2}; do
        if [ "$x" -ge "70" ]; then
                info="Temp. Procesora : $x - komputer zostal wylaczony o $(date +%X)"
                send_me_sms
                sleep 3
                shutdown -h now
        else
                if [ "$GPU_temp" -ge "70" ]; then
                        info="Temp. GPU o godz. $(date +%X):  $GPU_temp stopni"
                        send_me_sms
                fi
                if [ "$HDD_temp" -ge "45" ]; then
                        info="Temp. HDD o godz. $(date +%X):  $HDD_temp stopni"
                        send_me_sms
                fi
                if [ "${CPU1_temp:0:2}" -ge "50" ]; then
                        info="Temp. CPU1 o godz. $(date +%X):  ${CPU1_temp:0:2} stopni"
                        send_me_sms
                fi
                if [ "${CPU2_temp:0:2}" -ge "50" ]; then
                        info="Temp. CPU2 o godz. $(date +%X):  ${CPU2_temp:0:2} stopni"
                        send_me_sms
                fi
        fi
done


Z góry bardzo dziękuję za pomoc.
Pozdrawiam.

PS: oczywiście numer telefonu dobry podaję, tylko tutaj zmieniłem go :)

: 20 maja 2007, 10:38
autor: jang
Witam.
Ja tak z czystej ciekawości.
Kaka' pisze:Dodam jeszcze, że gdy wykonam ręcznie skrypt to jest wszystko dobrze:
Czy to znaczy, że wysyła Ci tego SMSa?
Czyli ciągle masz przekroczoną jakąś z podanych temperatur?

Pozdrawiam.

: 20 maja 2007, 11:18
autor: Kaka'
jang pisze:Czy to znaczy, że wysyła Ci tego SMSa?
Tak, SMSa mi wysyła gdy odpalę to ręcznie.
Czyli ciągle masz przekroczoną jakąś z podanych temperatur?
No nie ciągle, akurat wtedy dla testów odpaliłem parę kompilacji to temperatura skoczyła.

Pozdrawiam.

Ps.: Przepraszam za tę ikonę Opery, IceWeasel mi siadł.

: 20 maja 2007, 11:48
autor: jang
nc localhost 7634 u mnie nie działa więc robię tak: hddtemp /dev/sda. Spróbuj zmierzyć temperaturę i daj w skrypcie niższą o np.10 stopni niż ta którą masz, czyli niby na 100% musiałby wysłać i sprawdź co cron na to, albo dodaj do każdego "if ... fi" echo "proc 1 ", echo "hdd" i tak dalej i zobacz czy skrypt tam dochodzi? Oczywiście temperatury ustaw niższe niż faktycznie masz.
Ja kiedyś miałem coś takiego to działało:

Kod: Zaznacz cały

for x in jeden dwa trzy
do
  echo "To jest $x"
done
ale to nie:

Kod: Zaznacz cały

for x in $jeden $dwa $trzy
do
  echo "To jest $x"
done

: 20 maja 2007, 13:29
autor: Gość
jang pisze:nc localhost 7634 u mnie nie działa
to zainstaluj sobie netcat - wtedy będzie działało.
jang pisze:Ja kiedyś miałem coś takiego:
to działało:

Kod: Zaznacz cały

for x in jeden dwa trzy
do
  echo "To jest $x"
done
ale to nie:

Kod: Zaznacz cały

for x in $jeden $dwa $trzy
do
  echo "To jest $x"
done
Gdyby było tak jak mówisz, to skrypt nie zadziałał by w ogóle.
A on nie działa tylko z poziomu crona.

Sądzę, że sprawa może tu się rozbijać o odpowiednie przekierowanie stdout/stderr
Wieczorem znów się za to wezmę, to zobaczymy.

Pozdrawiam.

: 08 lipca 2007, 13:12
autor: Kaka'
Ok, problem rozwiązany :)

Po kilku tygodniach wreszcie się za to zabrałem :)

Najpierw do crontaba dodałem:

Kod: Zaznacz cały

*/3 * * * * /bin/sh -x /home/kaka/check_temp 2>/home/kaka/plik-debug.txt
No i okazało się, że jest problem z panelem NVIDIi, a dokładniej:

Kod: Zaznacz cały

(nvidia-settings:1954): Gtk-WARNING **: cannot open display:
A więc, zamieniłem linię:

Kod: Zaznacz cały

GPU_temp="$(nvidia-settings -q gpucoretemp | sed '/Attribute/!d;{s/.*):\ //;s/\.//}' 2>/dev/null)" 
na:

Kod: Zaznacz cały

GPU_temp="$(DISPLAY=":0.0" nvidia-settings -q gpucoretemp | sed '/Attribute/!d;{s/.*):\ //;s/\.//}' 2>/dev/null)"
I teraz wszystko pięknie działa :)

: 21 lipca 2007, 21:59
autor: giaur
Moge zrobic maly Offtopic? Poszukiwalbym analogicznego skryptu wysylajacego smsy do ery i korzystajacego z bramki ery, chce zrobic powiadomienie sms o nowej poczcie.

Wiec, jezeli ktokolwiek widzial, ktokolwiek wie....

P.S. Co to jest /usr/bin/sms?

: 21 lipca 2007, 22:42
autor: ruun
giaur pisze:P.S. Co to jest /usr/bin/sms?
Programik do wysyłania smsów. Jest w pakiecie sms-pl

: 22 lipca 2007, 15:29
autor: artur
A wie ktoś jak wysylać smsy do Orange? ta funkcja w sms-pl nie dziala bo byla pod ideę pisana.. :-/

EDIT:
Problem rozwiązany, znalazłem inny skrypt do wysyłania smsów, są też odmiany do innych sieci:
http://rodion.infobot.pl/orangembox.php
:-)