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

Aw: Re: Bash Cronjob starten mit Befehl source


Hallo Thomas, Stephan und Martin,
 
vielen Dank fuer 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 ueber SSH mit Zertifikat von extern erreichbar ist. Das sollte eigentlich sicher
genug sein.
 
Nochmals Danke und schoenes Wochenende
Andreas (...aus St. Ilgen)
 
Gesendet: Sonntag, 10. Mai 2015 um 11:51 Uhr
Von: "Thomas Stiefel" <Tom@xxxxxxx>
An: uugrn@xxxxxxxxxxxxxxxxx
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 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, [1]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
    [2]preludi@xxxxxx
     
     
       

 
 
-- UUGRN e.V. [3]http://www.uugrn.org/ [4]http://mailman.uugrn.org/mailman/listinfo/uugrn Wiki: [5]https://wiki.uugrn.org/UUGRN:Mailingliste Archiv: [6]http:/
/lists.uugrn.org/

References:

[1] file:///home/sdk/preludi@xxxxxx
[2] file:///home/sdk/preludi@xxxxxx
[3] http://www.uugrn.org/
[4] http://mailman.uugrn.org/mailman/listinfo/uugrn
[5] https://wiki.uugrn.org/UUGRN:Mailingliste
[6] 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/