ubuntuusers.de

Environment-Variable in Anacron setzen

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

DNNM

Anmeldungsdatum:
18. November 2008

Beiträge: 20

Hallo miteinander,

dieses Forum hat mir nun schon so oft geholfen, aber diesmal komme ich einfach nicht weiter und muss euch jetzt auch mal blöde Fragen stellen.

Was will ich machen?

Ich habe ein Backupscript mit dem ich abfragen will ob das Backup noch aktuell ist oder nicht. Diese Prüfung soll täglich mit anacron gestartet werden und das Ergebnis wird mit notify-send auf dem Bildschirm ausgegeben.

Wie shon bei 100000 anderen funktionierte das Script im Terminal aber nicht in anacron. Die Lösung dazu habe ich in natürlich in diesem Forum gefunden (Siehe kommentar in Script).

Welches System habe ich?

Ubuntu 10.04 LTS AMD64

Wo liegt das Problem?

In meinem Backup-Script wird auf die Umgebungsvariable "logname" zugegriffen. Diese Variable brauche ich um den HOME-Pfad zusammen zu basteln. Da aber, wie bereits festgestellt, anacron im Root-Context läuft stimmt die "logname" Variable nicht, bzw. ist leer oder existiert nicht. Wie immer funktioniert das Script im Terminal aber nicht in anacron. Der Grund ist wie gesagt der, dass anacron als Root ausgeführt wird. Ich muss also im Anacron-Script die Umgebungsvariable "logname" definieren damit das Backup-Script auf den logname zugreifen kann.

Hier das anacron Script ohne den Versuch die logname Variable zu definieren:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/sh 
#Damit Statusmeldungen von anacron an die Grafische Oberfläche ausgegeben werden 
#muss folgendes beachtet werden:
#Wenn das Skript unter anacron läuft, dann läuft es im Root-Context. 
#In diesem Context fehlen aber die notwendigen Informationen, um auf den laufenden XServer zuzugreifen. 
#Das aber bräuchte notify-send an dieser Stelle. Folgender Code sendet die Benachrichtigung 
#an alle Gnome Sitzungen, falls gerade mehrere laufen sollten (mehere Benutzer angemeldet) 
#Der Tip kommt aus dem Ubuntu-Forum: http://forum.ubuntuusers.de/topic/anacron-und-rsnapshot-probleme/

for PID in $(pgrep gnome-session)
do
        export $(cat /proc/$PID/environ | xargs -0 -n 1 echo | grep ^DISPLAY=)
done

cd /home/daniel-vm/.backups 
./backup -i b

Was habe ich bereits unternommen?

1.- eine Variable definieren und diese dann exportieren:

1
2
3
4
5
6
7
8
9
logname="testname"
export $logname
for PID in $(pgrep gnome-session)
do
        export $(cat /proc/$PID/environ | xargs -0 -n 1 echo | grep ^DISPLAY=)
done

cd /home/daniel-vm/.backups 
./backup -i b

2.- eine Variable definieren und direkt exportieren:

1
2
3
4
5
6
7
8
export logname="testname"
for PID in $(pgrep gnome-session)
do
        export $(cat /proc/$PID/environ | xargs -0 -n 1 echo | grep ^DISPLAY=)
done

cd /home/daniel-vm/.backups 
./backup -i b

3.- dann habe ich versucht andere namen für die Varaiblen zu nehmen- geht auch nicht

4.- ich habe die verschiedenen Varianten in die for-Schleife gepackt damit alle User die Variablen erhalten - geht auch irgndwie nicht

5.- alle Varianten nochmal durchgespielt mit und ohne Anführungszeichen - auch nix

Was mache ich bloß falsch?

Und: Hat jemand eine Idee wie ich anacron manuell starten kann? momentan muss ich zum Testen immer meine Virtual-Box zurücksetzen und warten bis anacron startet.

Ich danke euch schonmal für eure Mühen.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hast Du Dein Skript mal ganz normal auf der Kommandozeile mit env -u davor getestet ?
- dann siehst Du wenigstens, was es zu meckern hat.

Zu anacron: hast Du Dir dazu das Wiki und man anacron durchgesehen ?

track

DNNM

(Themenstarter)

Anmeldungsdatum:
18. November 2008

Beiträge: 20

Hallo track! Danke für Deine Antwort! Warst wohl noch ein wenig länger wach als ich 😀

Die links kannte ich schon, aber die Manpage von anacron hatte ich noch nicht so richtig gelesen. Auf jeden Fall habe ich daraus dann erfahren dass ich die Jobs Manuell starten kann. Und zwar so:

1
sudo anacron -f -n -d

Das erspart mir das ständige herunterfahren → zurücksetzen → neu starten → anmelden ... 😀 Danke für den Tipp mit der Manpage!! 😎

Nun wieder zum Problem:

Ich habs nun folgendermaßen gelöst:

Ich musste feststellen dass man anscheinend die logname-Variable nicht ändern kann. Also habe ich im anacron Script eine eigene Variable definiert und exportiert:

1
2
3
4
5
6
7
8
export BACKUPUSER="daniel-vm"
for PID in $(pgrep gnome-session)
do
        export $(cat /proc/$PID/environ | xargs -0 -n 1 echo | grep ^DISPLAY=)
done

cd /home/daniel-vm/.backups 
./backup -i b

im Backupscript habe ich nun eine Prüfung eingebaut die erkennt ob das Script von anacron aufgerufen wird. Wenn die Variable "BACKUPUSER" existiert, wird das Script von anacron aufgerufen. In diesem Fall überschreiben wir den User einfach mit der Variablen aus dem anacron-Script. Der restliche Code musste ich somit nicht ändern. Es funktioniert nun einwandfrei.

1
2
3
if [ $BACKUPUSER ] ; then
	USER=$BACKUPUSER
fi

Ich markiere den Beitrag als gelöst. Wenn aber doch noch jemand weiss ob man die "logname" im anacron ändern kann, darf er es ruhig noch dazu posten.

PS: Das Forum hier ist wirklich eines der besten, wenn nicht sogar DAS BESTE im Internet. 👍

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

"$logname" (klein geschrieben) ist doch einfach nur eine selbst eingefügte Variable ...?
"$LOGNAME" (man beachte den Unterschied zwischen klein- und Großschreibung bei *nix) dagegen ist die interne Variable von anacron
- kurz gegugelt: → http://linux-praxis.de/lpic1/lpi102/1.111.4.html - Zitat:

Einige Variablen werden von Cron selbst gesetzt. SHELL wird auf /bin/sh gesetzt, HOME und LOGNAME werden den Informationen über den User aus der /etc/passwd entnommen. Die Variablen SHELL und HOME dürfen verändert werden, LOGNAME nicht.

(allerdings habe ich keine Ahnung warum)

LG,

track

DNNM

(Themenstarter)

Anmeldungsdatum:
18. November 2008

Beiträge: 20

OK: Du meinst das "logname" aus dem Beispiel. Wie gesagt habe ich da eine Menge Zeug ausprobiert. Zu diesem Zeitpunkt stand halt grad "logname" im Script. Ich hatte aber auch "LOGNAME" versucht. Aber nun wissen wir auch noch aus anderen Quellen dass "LOGNAME" wohl nicht zu ändern ist. Danke für den Hinweis.

Aber dieser Umstand ist eingentlich auch keine Wahnsinns behinderung. Man kann es leicht anders lösen. Es war nur in dem einen Moment ein Problem weil man mit sowas nicht rechnet. Da hält man sich dann selbst für blöd - 😬

Antworten |