Hallo zusammen,
ich wollte auf Basis dieses Howtos auf meiner TS-659-Pro den DNS installieren stieß aber auf das gleiche Problem wie
hier http://forum.qnapclub.de/viewtopic.php?f=33&t=9299.
Allerdings finde ich es seltsam und ziemlich schräg einen cronjob zu definieren, der alle 6 Minuten prüft, ob eine separate autostart erfolgreich durchgeführt wurde, nur weil die autorun.sh scheinbar nicht funktioniert. Ich habe daraufhin etwas herumg gesucht und folgendes festgestellt.
In der Ts-659-Pro wird die autorun.sh bereits ausgeführt, wenn
1.) /opt noch nicht einen symlink auf /share/MD0_DATA/.qpkg/Optware ist und
2.) unter /share/MD0_DATA/ das .qpkg/Optware noch nicht entpackt ist.
Das ist auch zu lösen ohne einen cronjob zu bauen, der dann ständig sinnlos prüft, ob er noch einmal ausgeführt werden muß.
Zunächst habe ich mir die autorun.sh so modifiziert, daß sie (ähnlich wie bei der Lösung über die crontabs) eine autostart unter /share/MD0_DATA/Config ausführt, sofern sie vorhanden ist. Ich prüfe vorher mittels einer Schleife, ob die Datei schon erreichbar ist. Damit es im Fehlerfall keine Endlosschleife gibt, habe ich eine Obergrenze an Schleifendurchläufen definiert (maxtrials). Wenn die autostart nicht gefunden wird, schreibe ich einen Fehler in /var/log/messages. Die autostart starte ich als Hintergrundprozess, damit die autorun.sh durch eine Fehler in eine Endlosschleife mündet und den weiteren Ablauf aufhält. Hier meine autorun.sh:
maxtrials=10trials=0until [ -f /share/MD0_DATA/Config/autostart -o $trials -eq $maxtrials ]; do sleep 2 trials=`expr $trials + 1`doneif [ -f /share/MD0_DATA/Config/autostart ]; then /share/MD0_DATA/Config/autostart &else echo "`date`: autostart after $maxtrials trials not startet" >> /var/log/messagesfi
Für den autostart unter /share/MD0_DATA/Config habe ich das Konstrukt mit einer autostart und autostart_job übernommen, um ggf. weitere jobs integrieren zu können. In der autostart führe ich die autstart_job in einer Schleife so lange aus, bis sie erfolgreich beendet wurde (natürlich wieder mit einer Obergrenze an Schleifendurchläufen. Im Negativfall gibt es einen Fehlermeldung unter /var/log/messages. Die autostart ist so gestaltet, daß sie auch nach wie vor als cronjob betrieben werden kann. Meine autostart sieht so aus:
if [ ! -f "/share/HDA_DATA/start_config" ]; then /share/MD0_DATA/Config/autostart_job maxtrials=10 trials=0 until [ -f "/share/HDA_DATA/autostart_job_successful" -o $trials -eq $maxtrials ]; do sleep 10 trials=`expr $trials + 1` /share/MD0_DATA/Config/autostart_job done if [ -f "/share/HDA_DATA/autostart_job_successful" ]; then touch /share/HDA_DATA/start_config else echo "`date`: autostart_job not finished successfuly after $maxtrials trials" >> /var/log/messages fifi
Die eigentliche Arbeit macht die autostart_job. Auch hier prüfe ich mittels einer Schleife ob das Startscript für das named Paket existiert bzw. schon erreichbar ist (wieder mit Obergrenze maxtrials). Wenn die Datei erreichbar ist, prüfe ich mittels S09named start, ob der nameserver schon läuft und starte ihn, wenn das noch nicht der Fall ist. Anschließend wird erneut der status des nameservers geprüft. Wenn er läuft wird der job als successful beendet ansonsten gibt es einen Fehler in /var/log/messages. Hier meine autostart_job:
maxtrials=10trials=0# Pruefe ob das Startscript fuer den Nameserver schon existiertuntil [ -f /share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named -o $trials -eq $maxtrials ]; do sleep 2 trials=`expr $trials + 1`done# starte DNS-Server wenn er noch nicht laeuftif [ -f /share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named ]; then running=`/share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named status` if [ ! -n "$running" ]; then touch /share/HDA_DATA/start_DNS /share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named start > /share/HDA_DATA/named.log fi # Nameserver erfolgreich gestartet started=`/share/MD0_DATA/.qpkg/Optware/etc/init.d/S09named status` if [ -n "$started" ]; then touch /share/HDA_DATA/autostart_job_successful else echo "`date`: named not startet" >> /var/log/messages fielse echo "`date`: named start script does not exist" >> /var/log/messagesfi
Interessanterweise mußte ich auch das Startscript S09named von weiter oben für die TS-659-Pro modifizieren. Entweder ist die Scriptengine auf der TS-659 etwas anders oder in dem Code oben sind ein paar heftige Script-Fehler enthalten. Hier eine Version, die auf der TS-659-Pro funktioniert:
start() {
echo "Starting named service"
# Start daemons
pid=`pidof named`
if [ -n "$pid" ]; then
echo "already running"
else
/opt/sbin/named
pid=`pidof named`
if [ -n "$pid" ]; then
echo "named started: $pid"
fi
fi
}
stop() {
# Stop daemons.
pid=`pidof named`
echo "Shutting down named: $pid"
if [ -n "$pid" ]; then
kill $pid
echo "named stopped"
fi
}
restart() {
# Stop daemons.
pid=`pidof named`
echo "restart named: $pid"
if [ -n "$pid" ]; then
kill -HUP $pid
echo "named restarted"
fi
}
status() {
pid=`pidof named`
if [ -n "$pid" ]; then
echo "named is running: $pid"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
pid=`pidof named`
echo "Usage: named { [start]|stop|[restart][status] } PID : $pid"
exit 1
esac
exit 0
Alles anzeigen
Bei mir funktioniert der nameserver jetzt automatisch nach dem reboot ohne cronjob. Allerdings kann man unter /var/log/messages sehen, daß das Startscript S09named erst im 3. Versuch erfolgreich den nameserver starten kann. Das sind 20 Sekunden.
Ich hoffe ich kann damit den Besitzern der TS-659-Pro ein wenig weiterhelfen.
Gruß Jafar