[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Aw: Re: Bash Cronjob starten mit Befehl source
[Thread Prev] | [Thread Next]
- Subject: Aw: Re: Bash Cronjob starten mit Befehl source
- From: preludi@xxxxxx
- Date: Sun, 10 May 2015 13:23:29 +0200
- To: uugrn@xxxxxxxxxxxxxxx
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/