Cron - skrypt nie chce się wykonywać


(chey) #1

Witam,

 

Bawię się z pisaniem skryptów i ich automatyzacją. Posiadam skrypcik, który sprawdza czy system jest aktualny, jeśli są jakieś dostępne aktualizacje pojawia się chumrka z notyfikacją:

#!/bin/bash
#aktualny czas - do testów
NOW=`date +%y-%m-%d-godz.%H:%M:%S`

updates=$(/usr/lib/update-notifier/apt-check 2>&1)

echo $NOW >> /tmp/testvarlog.log

# Sprawdzanie aktualizacji bezpieczeństwa
pending=$(echo "$updates" | cut -d ";" -f 2)
if ["$pending" != "0"]; then
    notify-send "Aktualizacje bezpieczeństwa dostępne!"
fi

# Pozostałe aktualizacje
pending=$(echo "$updates" | cut -d ";" -f 1)
if ["$pending" != "0"]; then
    notify-send "Aktualizacje dostępne!"
fi

Skrypt uruchomiony ręcznie działa (dodatkowo do testów zapisuje się aktualna data i czas do pliku z logiem)

 

Następnie w:

sudo crontab -e

mam taki wpis:

*/1 * * * * ~/skrypty/update_notifer.sh >/dev/null 2>&1

(do testów uruchamia się co minutę)

log z sysloga:

Jun 23 12:34:01 kd CRON[7646]: (root) CMD (~/skrypty/update_notifer.sh >/dev/null 2>&1)

skrypt nie działa (nie ma notyfikacji, ani wpisu w pliku log)

 

Jeśli w cronie wpiszę bez frazy >/dev/null 2>&1

otrzymuję sysloga:

Jun 23 12:38:01 kd CRON[12493]: (root) CMD (~/skrypty/update_notifer.sh )
Jun 23 12:38:01 kd postfix/pickup[32498]: 547145FBB7: uid=0 from=<root>
Jun 23 12:38:01 kd postfix/cleanup[12497]: 547145FBB7: message-id=<20150623103801.547145FBB7@kd>
Jun 23 12:38:01 kd postfix/qmgr[32499]: 547145FBB7: from=<root@kd>, size=509, nrcpt=1 (queue active)
Jun 23 12:38:01 kd postfix/local[12499]: 547145FBB7: to=<root@kd>, orig_to=<root>, relay=local, delay=0.11, delays=0.07/0/0/0.03, dsn=2.0.0, status=sent (delivered to mailbox)
Jun 23 12:38:01 kd postfix/qmgr[32499]: 547145FBB7: removed

Wcześniej miałem błąd, wygooglowałem i okazało się, ze trzeba zainstalować postfix - podejrzewam, że tutaj jest problem.

 

Jakieś sygestie co jest nie tak?

 

P.S. skrypt ma chmod 755, system Ubuntu 14.04


(#WireBoot) #2
updates=$(/usr/lib/update-notifier/apt-check 2>&1)

 

Tu używasz ścieżek bezwzględnych

 

a tu nie:

if ["$pending" != "0"]; then
notify-send "Aktualizacje bezpieczeństwa dostępne!"
fi

 

Zamiast notify-send daj pełną ścieżkę bezwzględną do tego programu


(chey) #3

Użyłem

/usr/bin/notify-send

nadal działa ręcznie oraz nadal nie działa przez crona


(marcin82) #4

 

Daj ścieżkę bezwzględną, ale z nazwą użytkownika:

/home/użytkownik/skrypty/update_notifer.sh

 

Najlepiej jednak będzie wrzucić skrypt do /usr/local/bin - daj nazwę bez rozszerzenia. Do crona daj taki wpis:

* * * * * /usr/local/bin/NAZWA

 

To nad czym trzeba popracować - coś nie działa:

export DISPLAY=:0; /usr/bin/notify-send "Nie przegap kolejnego odcinka WSPANIAŁEGO STULECIA!"

 

:smiley:


(chey) #5

Problem rozwiązn

 

Przede wszystkim wpis w skrypcie cron wykonuje się tak:

crontab -e

a nie:

sudo crontab -e

następnie trzeba utworzyć zmienną: DBUS_SESSION_BUS_ADDRESS

aby to zrobić należy w skrypcie wywoływanym przez crona dodać:

nautilus_pid=$(pgrep -u $LOGNAME -n nautilus)

if [-z "$nautilus_pid"]; then
exit 0
fi


eval $(tr '\0' '\n' < /proc/$nautilus_pid/environ | grep '^DBUS_SESSION_BUS_ADDRESS=')


if [-z "$DBUS_SESSION_BUS_ADDRESS"]; then
echo "Failed to find bus address" >&2
exit 1
fi

export DBUS_SESSION_BUS_ADDRESS

Tak się dzieje jeśli korzystamy z crona oraz notify-send

 

Pozdrawiam!