Re: Bash Cronjob starten mit Befehl source

Autor: Thomas Stiefel <Tom_at_vTux.de>
Datum: Sun, 10 May 2015 11:51:41 +0200
Hallo Andreas,

das wird so nicht funktionieren, denn eine Variable steht maximal in 
einer Shell und deren Subshells zur Verfügung. Der Cron-Daemon öffnet 
für jeden Cronjob eine eigene Shell mit einem eigenen Variablenset.
Wenn Du also die alte IP in deinem nächsten Job wieder verwenden 
möchtest, dann benötigst du dafür einen "persistenten Speicher". Das 
funktioniert nur mit einer Datei, in der die alte IP gespeichert und 
beim nächste Job wieder ausgelesen wird. So wie es auch schon Stephan 
geschrieben hat.
Bei Änderung der IP speicherst du dann die neue IP dann wiederum für die 
zukünftigen Jobs als alte IP ab.

Das ist in etwa vergleichbar mit Sessions im Web-Browser, die auch 
nichts von einander wissen, wenn Du keine Cookies (oder Session-Daten in 
einer Datenbank) benutzt. Dort werden dann solche Variablen/Werte in 
einem Cookie gespeichert.

Beispiel-Script:
#!/bin/bash
IPNOW=$(<dein Befehl zur Ermittlung der IP>)
IPOLD=$(cat $HOME/tmp/IPOLD.txt)

if [ "$IPNOW" == "$IPOLD" ]
then
   echo "Keine neue IP-Adresse => nix zu tun"
   exit 0
else
   echo "IP-Adresse hat sich geaendert => oh, ich muss was tun"
   echo $IPOLD > $HOME/tmp/IPOLD.txt
   <deine Aktionen>
fi

Viele Grüße
Tom


On 10.05.2015 00:47, preludi_at_web.de wrote:
> Hallo allerseits,
> ich möchte ein Bash Script in einem Cronjob ausführen. Das Script lädt 
> meine externe IP Adresse in eine Cloud.
> Zwecks Vergleich alter IP Adresse und möglicher neuer IP Adresse 
> speichere ich die alte IP Adresse in einer Variable $IP_alt.
> Nach Abarbeiten des Scripts muß natürlich diese $IP_alt weiterhin 
> verfügbar sein. Ich mache das mit dem Befehl export (bzw. declare -x). 
> Damit würde die Variable nur in einer Subshell zur Verfügung stehen, 
> nicht jedoch bei nächster Ausführung des gleichen Scripts im Cronjob 
> (...ich hoffe, ich habe das so richtig verstanden, ich bin nur Hobby 
> Linuxer).
> Damit die Variable $IP_alt bei der nächsten Scriptausführung verfügbar 
> ist, starte ich dieses statt mit bash <script.sh> jetzt mit source 
> <script.sh>. Alles funktioniert wunderbar bei Ausführung im Terminal. 
> Es funktioniert aber nicht innerhalb eines cronjobs.
> crontab wie folgt:
> # m h  dom mon dow   command
> * * * * * *source* /script.sh
> Das Problem liegt bei "source". Schreibe ich hier "bash" läuft das 
> Script, die Variable $IP_alt steht aber nicht zu Verfügung.
> Kann mir jemand möglichst einfach beschrieben weiterhelfen?
> Vielen Dank vorab + schönes WE
> Andreas
> preludi_at_web.de
>
>



-- 
UUGRN e.V. http://www.uugrn.org/
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/
Empfangen am 10.05.2015

Dieses Archiv wurde generiert von hypermail 2.2.0 : 10.05.2015 CEST