1

Temat: Cron - skrypt nie działa

Czemu skrypt checkip.sh nie chce działać z pod Crona?

#!/bin/bash

getip=$(wget http://icanhazip.com)
cat index.html > gotip.txt

gotip=$(cat gotip.txt)
compare=$(cat workingip.txt)

if [[ "$compare" != "$gotip" ]]
    then 
    EMAIL="nick@gmail.com"
    EMAILMESSAGE="ipmessage.txt"
    echo "Obecny adres IP $gotip" >> $EMAILMESSAGE
    /usr/sbin/sendmail -t "$EMAIL" < $EMAILMESSAGE
    rm ipmessage.txt
    cp gotip.txt workingip.txt
    rm index.html

else
echo "done"
rm index.html
fi

Po ręcznym uruchomieniu działa. Jest drobny błąd bo przy pierwszym uruchomieniu nie ma jeszcze pliku workingip.txt ale to nie jest chyba przyczyną nie działania w Cronie. Najpierw wrzuciłem skrypt do /sbin gdzie wrzucam zawsze inne skrypty. Teraz wrzuciłem do /usr/bin ale nadal nie chce działać. W logread co 10 minut jest tylko info iż Cron odpalił niby skrypt:

Wed Apr  5 04:50:00 2017 cron.info crond[4756]: USER root pid 4874 cmd /usr/bin/checkip.sh

/etc/crontabs/root:

*/10 * * * * /usr/bin/checkip.sh

Prawa wykonywania nadałem przez chmod +x
Teraz zapisuje mi pliki gotip.txt i workingip.txt w /overlay/upper/root - wolałbym aby robił to gdzie indziej np. w tym samym katalogu co jest skrypt. Lepiej zmienić lokalizację skryptu czy określić bezpośrednie ścieżki do plików w skrypcie?

2

Odp: Cron - skrypt nie działa

Więc podawaj pełne ścieżki do plików a nie tak jak zrobiłeś > gotip.txt - to oznacza bieżący katalog. A dla procesów cronowych w zależności od wydania bieżącym katalogiem jest albo / albo /root.

#!/bin/bash <- jesteś pewien? Masz basha zainstalowanego? Nie ma basha domyślnie w openwrt.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Cron - skrypt nie działa

Co do bieżącego katalogu to mi nie przeszkadza i pliki może sobie tworzyć gdzie chce więc nie określałem pełnych ścieżek w skrypcie ale ma jednak znaczenie gdzie jest skrypt:
jeśli w /usr/bin to bieżącym jest /overlay/upper/root
jeśli w /sbin to bieżącym jest /root

Prawdę mówiąc skrypt znalazłem w necie i dlatego zostało #!/bin/bash ale skoro skrypt działa po ręcznym odpaleniu więc się tym nie przejmowałem. Teraz zmieniłem na #!/bin/sh ale nie wiem czy to coś dało.

Przeniosłem skrypt do /sbin, zmieniłem w konfiguracji Crona ścieżkę do skryptu i zrobiłem restart routera i chyba działa bo plik gotip.txt pojawił się są w /root

4

Odp: Cron - skrypt nie działa

A wiesz że /overlay/upper/root i /root to to samo  z programowego punktu widzenia systemu?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Cron - skrypt nie działa

Cezary napisał/a:

A wiesz że /overlay/upper/root i /root to to samo  z programowego punktu widzenia systemu?

To samo, nie to samo - jak testowałem skrypt ręcznie to chciałem wiedzieć gdzie zapisał plik workingip.txt aby zmienić IP ręcznie.

Wygląda na to iż wszystko działa jak należy bo przyszedł mi e-mail zaraz po tym jak zmienił się IP. Skrypt jest w /sbin. Ustawiłem wykonywanie skryptu co 10 minut.
Zdaje się iż po modyfikacji pliku konfiguracyjnego Cron'a trzeba restartować router i czasami chyba Cron po restarcie nie chce działać i pomaga dopiero sam restart Crona:

/etc/init.d/cron restart

Myślę iż to jest całkiem dobry zamiennik DDNS no chyba iż ktoś woli płacić za rozszerzone konto w noip.com aby nie trzeba było co miesiąc potwierdzać.

6

Odp: Cron - skrypt nie działa

To samo - poczytaj co to jest i jak działa /overlay w openwrt.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7 (edytowany przez RGW 2018-08-27 18:29:06)

Odp: Cron - skrypt nie działa

Jakby ktoś miał podobny problem wystarczy, że na początku dopiszemy katalog w którym ma się to wykonać np /root/

#!/bin/sh
cd /root/

getip=$(wget http://icanhazip.com index.html)
cat index.html > gotip.txt
 

Chociaż możliwe, że pójdzie i bez tego. Nie chce mi się już sprawdzać smile

ThinClient fan