Aw: Re: Bash Cronjob starten mit Befehl source

Autor: <preludi_at_web.de>
Datum: Sun, 10 May 2015 13:23:29 +0200
Hallo Thomas, Stephan und Martin,
 
vielen Dank für Eure antworten, alle gehen in die gleiche Richtung. Ich werde die alte IP Adresse in einer Datei zwischenspeichern. Die Datei liegt auf einem kleinen Server der zwar permanent mit dem Internet verbunden ist aber nur über SSH mit Zertifikat von extern erreichbar ist. Das sollte eigentlich sicher genug sein.
 
Nochmals Danke und schönes Wochenende
Andreas (...aus St. Ilgen)
 
Gesendet: Sonntag, 10. Mai 2015 um 11:51 Uhr
Von: "Thomas Stiefel" <Tom@vTux.de>
An: uugrn@mailman.uugrn.org
Betreff: Re: Bash Cronjob starten mit Befehl source
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@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
 
 
 
 
  -- 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/
-- 
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