Autostart eines Start-/Stopp-Skript funktioniert nicht

Status
Für weitere Antworten geschlossen.

Christian79

Benutzer
Mitglied seit
10. Aug 2012
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich habe mir auf meiner 710+ ein Shell-Skript angelegt um eine Anwendung sauber starten und stoppen zu können. Wenn ich das Skript manuell starte funktioniert es. Nun möchte ich es bei jedem booten der DiskStation automatisch starten lassen. Dazu habe ich es das weiter unten beigefügte Skript im "Autostart"-Ordner /usr/local/etc/rc.d abgelegt - in der Theorie sollte es also funktionieren... Tut es aber nicht. :(

Ich habe keine Idee woran es liegen könnte. Würde mich über Hilfe sehr freuen.

Vielen Dank,
Christian

Shell-Skript:

Rich (BBCode):
#!/bin/sh
# ccu-historian.sh start / stop Script Synology DS
# By Christian 10.08.2012

# Variablen
USER=root
PATH_PROG="/usr/local/ccu-historian"
PATH_JAVA="/volume1/@appstore/java/bin"

####

cd $PATH_PROG

# Others
JAR_FILE="/usr/local/ccu-historian/ccu-historian.jar"

start() {
	VAR_PS1=$(ps | grep java | grep -v grep | wc -l)
	if [ $VAR_PS1 -eq 0 ]
	then
		su -c "$PATH_JAVA/java -jar $JAR_FILE 2>/dev/null &" - $USER
		echo "*** ccu-historian wurde gestartet ***"
	else
		echo "*** ccu-historian laeuft schon ***"
	fi 
}

stop() {
	VAR_PS2=$(ps | grep java | grep -v grep | wc -l)
	if [ $VAR_PS2 -eq 0 ]
	then
		echo "*** ccu-historian ist schon beendet ***"
	else
		killall java 2>/dev/null
		sleep 5
		VAR_PS3=$(ps | grep java | grep -v grep | wc -l)
		if [ $VAR_PS3 -eq 0 ]
		then
			echo "*** ccu-historian wurde erfolgreich beendet ***"
		else
			sleep 1
			stop
		fi
	fi
}	

####

case $1 in
	start)
		start
	;;
	stop)
		stop
	;;
	restart)
		stop
		sleep 1
		start
	;;    
	*)
		echo "Usage: $0 [start|stop|restart]"
	;;
esac
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
stimmen die Rechte der Datei? Muss "ausführbar" markiert sein. Und der Name stimmt auch? Muss mit S und zwei Zahlen beginnen und auf .sh enden
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
Und versuch mal, es nach /usr/syno/etc/rc.d/ zu schieben. Aber aufpassen: nach jedem Firmware Update ist es weg. Also nochmal reinschieben.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0

Christian79

Benutzer
Mitglied seit
10. Aug 2012
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Wow! Kaum gepostet - schon Hilfe. Danke...

Ausführbar ist die Datei eigentlich. Habe eine CHMOD 755 auf das Skript angewendet...
In dem /usr/local/etc/rc.d sind noch andere Skripte drin. Die beginnen nicht mit S<Nummer> und laufen trotzdem. Den alternativen Ordner /usr/syno/etc/rc.d hatte nicht nicht genutzt. Dem How-To zufolge sollte da nicht umbedingt was eigenes rein - ich werde es aber mal probieren.
 

Christian79

Benutzer
Mitglied seit
10. Aug 2012
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Was mir noch aufgefallen ist:

Im Forum schrieb jemand, dass es wohl einen Unterschied macht ob man die DiskStation startet oder rebootet. Stimmt das? Ich kann mir das gar nicht vorstellen.
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
Mit dem ist wohl eher Crontab gemeint oder?
 

Christian79

Benutzer
Mitglied seit
10. Aug 2012
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Funktioniert leider auch im Verzeichnis /usr/syno/... nicht. Habe zur Sicherheit extra noch einmal ein CHMOD +X auf das Skript angewandt.

Sonst noch Ideen?
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
heisst das Script auch wirklich Sxx? Meine (zb S99ejabberd.sh) gingen immer problemlos.
 

Christian79

Benutzer
Mitglied seit
10. Aug 2012
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Ganz bestimmt:

10-08-2012 21-22-19.jpg

Gibt es eine Möglichkeit ein Log zu schreiben wenn das Skript gestartet wird?
Ich bin nicht der Linux-Experte. Habe mir das aktuelle Wissen grob aus Tutorials und anderen Skripten zusammengeklaut...
 

ubuntulinux

Benutzer
Mitglied seit
23. Jan 2010
Beiträge
2.063
Punkte für Reaktionen
0
Punkte
82
Mach ne neue Linie rein ins script:

>/root/script_wurde_ausgeführt

Wenn nach dem Reboot im Ordner /root ein File namens script_wurde_ausgeführt liegt, wurde es ausgeführt ;)
 

Christian79

Benutzer
Mitglied seit
10. Aug 2012
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Es hat funktioniert!

Die Lösung ist aber mehr als dämlich - zumindest in meinen Augen...

Ich musste einen Sleep-Befehl vor den eigentlichen Job einbauen. Dann wartet das NAS mit der Ausführung eine Weile und alles läuft perfekt.
Um das für die Allgemeinheit einmal zu dokumentieren hier die geänderte Zeile im Skript:

Alte Befehlszeile (wird nicht sauber im Autostart abgearbeitet):
Rich (BBCode):
nohup $PATH_JAVA/java -jar $JAR_FILE 2>/dev/null &
Neue Befehlszeile (wird sauber im Autostart abgearbeitet):
Rich (BBCode):
( sleep 120; nohup $PATH_JAVA/java -jar $JAR_FILE 2>/dev/null ) &

Vielen Dank für die Hilfe - immerhin bin ich so der Sache auf die Spur gekommen! ;)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat