ubuntuusers.de

rc.local wird nicht immer ausgeführt!

Status: Gelöst | Ubuntu-Version: Lubuntu 11.10 (Oneiric Ocelot)
Antworten |

dickeberta

Anmeldungsdatum:
11. Januar 2012

Beiträge: Zähle...

Hallo!

Ich habe ein Problem und hoffe sehr, dass mir jemand helfen kann.

Ich habe ein Java-Programm geschrieben, das ich bei jedem Systemstart über die rc.local starte. Allerdings wird es nur bei jedem 2. oder 3. Systemstart geladen!

Mein Programm schreibt logfiles in /var/www/logs/ . Manchmal manchmal geht das auch und alles ist gut. Aber manchmal kann er dort nicht schreiben:

berta@berta:~$ java -jar shutdownServer.jar
java.io.FileNotFoundException: /var/www/logs/MeineLogDatei.log (Permission denied)
log4j:WARN No appenders could be found for logger (StatusThread).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN No appenders could be found for logger (Server).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Dann bricht das komplette Programm ab.

Die Frage ist, warum kann er die Logfiles manchmal anlegen und manchmal nicht?

Hier meine rc.local:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31


  GNU nano 2.2.6                                  Datei: rc.local                                                                            

#!/bin/sh 
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# wake on lan 
#ethtool -s eth0 wol g 

/bin/sleep 10
/usr/bin/java -jar /home/berta/shutdownServer.jar

exec >/home/berta/log
echo "trying to start shutdownserver"
[ -x /usr/bin/java -jar /home/berta/shutdownServer.jar ] && echo "shutdownServer seems to be not executable in this environment but lets try"
( exec /usr/bin/java -jar /home/berta/shutdownServer.jar ; ) &
exec >/dev/stdout


exit 0

die Logfile, die von der rc.local erzeugt wird, wird ebenfalls nur erzeugt wenn auch die Logfile aus dem Programm erzeugt werden kann.

Und in Zeile 1 habe ich nach

Desweiteren kann es passieren, dass die Datei nicht vollständig ausgeführt wird. Dazu kommt es, wenn einer der eingefügten Befehle einem Fehler erzeugt (Returncode != 0). Da in der ersten Zeile #!/bin/sh -e standardmäßig die Option -e angegeben ist, wird die Ausführung sofort abgebrochen. Um dieses Verhalten abzustellen, verkürzt man die 1. Zeile auf #!/bin/sh. (http://wiki.ubuntuusers.de/rc.local#Probleme-und-Loesungen)

das -e weggelassen.

Die Rechte sehen so aus:

drwxr-xr-x 2 root root 4096 2012-01-11 14:10 logs

-rw-r--r-- 1 root root   159 2012-01-11 13:44 MeineLogDatei.log
-rw-r--r-- 1 root root 10368 2012-01-10 23:57 MeineLogDatei.log.2012-01-10

Ich bin schon seit Tagen auf der Suche nach einer Lösung und komme einfach nicht weiter.

Danke schonmal im Voraus für die Hilfe! Wenn ich was wichtiges vergessen haben sollte bitte sagen!

Viele Grüße, Berta

u1000

Anmeldungsdatum:
2. Oktober 2011

Beiträge: 1850

Du hasts hier auf jeden Fall ein Rechte Durcheinder:

1.

berta:~$ java -jar shutdownServer.jar

Du rufst das Programm unter deinem User auf, die Log Dateien (MeineLogDatei.log) gehören aber root - so wird das also nie laufen.

2. Die Kommandos aus der rc.local werden als root ausgeführt. Logs werden aber in dein User Verzeichniss geschrieben

exec >/home/berta/log
  • Soll das Java-Programm als root oder unter deinem User laufen ?

  • Datei Rechte+Besitzer dementsprechend setzen.

  • sudo - Programm unter einem anderem User ausführen

dickeberta

(Themenstarter)

Anmeldungsdatum:
11. Januar 2012

Beiträge: 4

Die Zeile 1. habe ich manuell über ssh ausgeführt um an den code zu kommen, den ich posten wollte.

Eigentlich wird der Befehl ja in der rc.local als root aufgerufen! Und die log im User-Verzeichnis ist nur zu Testzwecken die brauch ich nicht! Es geht nur darum, dass er MeineLogDatei.log schreiben kann. Wie muss ich meine Rechte denn anpassen? Das Java-Programm soll als Root laufen.

u1000

Anmeldungsdatum:
2. Oktober 2011

Beiträge: 1850

dickeberta schrieb:

Wie muss ich meine Rechte denn anpassen? > Das Java-Programm soll als Root laufen.

Dann brauchst du kein sudo, da die rc.local als root ausgeführt wird. –> rc.local

Dabei entfällt die Verwendung von sudo – Einträge werden immer mit Root-Rechten ausgeführt.

und im Abschnitt "Probleme und Lösungen"

Da Upstart asynchron arbeitet, kann es passieren, dass manche Dienste oder auch eigene Befehle quasi zu früh ausgeführt werden und damit unter Umständen der gewünschte Effekt nicht eintritt. Dem kann entgegengewirkt werden, in dem man die Ausführung mit sleep verzögert bzw. wiederholt.

Daher nun die Frage, was dein Java Programm machen soll. Benötigt es bestimmte gemountete Verzeichnisse oder benötigt es Netzwerk ? Was passiert, wenn du den sleep Befehl von 10 s auf z.B. 60 s vergrößerst ?

dickeberta

(Themenstarter)

Anmeldungsdatum:
11. Januar 2012

Beiträge: 4

Okay, ich habe den sleep hochgesetzt, jetzt klappt alles wunderbar!

Vielen Dank für die schnellen Antworten!

Gruß berta

Antworten |