[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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 Verfuegung. Der Cron-Daemon oeffnet fuer jeden
Cronjob eine eigene Shell mit einem eigenen Variablenset.
Wenn Du also die alte IP in deinem naechsten Job wieder verwenden moechtest,
dann benoetigst du dafuer einen "persistenten Speicher". Das funktioniert nur
mit einer Datei, in der die alte IP gespeichert und beim naechste Job wieder
ausgelesen wird. So wie es auch schon Stephan geschrieben hat.
Bei Aenderung der IP speicherst du dann die neue IP dann wiederum fuer die
zukuenftigen 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 Gruesse
Tom


On 10.05.2015 00:47, preludi@xxxxxx wrote:
> Hallo allerseits,
> ich moechte ein Bash Script in einem Cronjob ausfuehren. Das Script laedt
> meine externe IP Adresse in eine Cloud.
> Zwecks Vergleich alter IP Adresse und moeglicher neuer IP Adresse speichere
> ich die alte IP Adresse in einer Variable $IP_alt.
> Nach Abarbeiten des Scripts muss natuerlich diese $IP_alt weiterhin
> verfuegbar sein. Ich mache das mit dem Befehl export (bzw. declare -x).
> Damit wuerde die Variable nur in einer Subshell zur Verfuegung stehen, nicht
> jedoch bei naechster Ausfuehrung 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 naechsten Scriptausfuehrung verfuegbar
> ist, starte ich dieses statt mit bash <script.sh> jetzt mit source
> <script.sh>. Alles funktioniert wunderbar bei Ausfuehrung 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" laeuft das Script,
> die Variable $IP_alt steht aber nicht zu Verfuegung.
> Kann mir jemand moeglichst einfach beschrieben weiterhelfen?
> Vielen Dank vorab + schoenes WE
> Andreas
> preludi@xxxxxx
> 
> 


-- 
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/