Autostart eines Start-/Stopp-Skript funktioniert nicht

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Christian79

Benutzer
Registriert
10. Aug. 2012
Beiträge
6
Reaktionspunkte
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
 
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
 
Und versuch mal, es nach /usr/syno/etc/rc.d/ zu schieben. Aber aufpassen: nach jedem Firmware Update ist es weg. Also nochmal reinschieben.
 
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.
 
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.
 
Mit dem ist wohl eher Crontab gemeint oder?
 
Funktioniert leider auch im Verzeichnis /usr/syno/... nicht. Habe zur Sicherheit extra noch einmal ein CHMOD +X auf das Skript angewandt.

Sonst noch Ideen?
 
heisst das Script auch wirklich Sxx? Meine (zb S99ejabberd.sh) gingen immer problemlos.
 
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...
 
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 ;)
 
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