(Gelöst) initd/rc5.d script anpassen

Status
Für weitere Antworten geschlossen.

cal

Member
Hallo,
ich versuche gerade ein shellscript das ich in die /etc/init.d/rc5.d von Debian edge 4.0r0 gelegt habe zum funktionieren zu bringen.
Da ich davon nicht wirklich eine Ahnung habe bin ich nur am rumprobieren.
Das Anwenderhandbuch schweigt sich dazu ziemlich aus oder ich suche mal wieder nicht unter den richtigen Stichwörtern.
Die Anwendung die ich starten möchte ist "fancontrol". (Was ich damit unter SuSE 10.2 schon alles angestellt habe ist hier http://www.pc-forum24.de/stationaere-hardware/3682-geloest-lis2-display-usb-automatische-lueftersteuerung-betrieb-unter-10-2-moeglich-new-post.html
zu finden.)
Was nicht funktioniert ist: "fancontrol" einfach an einer passenden Stelle in das script S25lm-sensors einzutragen.
Fancontrol ist ein shellscript dessen Mainroutine hauptsächlich aus einer Endlosschleife besteht.
D. h. wenn ich dies so mache bleibt der komplette init-Vorgang stehen und wartet darauf das Fancontrol fertig wird, was natürlich nie passiert.

Jetzt versuche ich in diesem S25lm-sensors-script einen weiteren Prozess zu starten, der dann endlos weiterlaufen soll, während mein init-Vorgang regulär weiterläuft.

Beim googlen bin ich dann auf "popen" gestoßen, aber dies scheint hier nicht zu funktionieren oder ich benutze "popen" falsch.
Hier das komplette script:
Code:
#!/bin/sh




PATH=/bin:/usr/bin:/sbin:/usr/sbin
PROGRAM=/usr/bin/sensors

test -x $PROGRAM || exit 0

case "$1" in
  start)
    echo -n "Setting sensors limits:"
    /usr/bin/sensors -s 1> /dev/null 2> /dev/null
    /usr/bin/sensors 1> /dev/null 2> /dev/null
    echo " done."

    [COLOR=Red][B]# Start fan control, 
      echo -n ", starting fan control: "
        popen(usr/sbin/fancontrol,"x")[/B][/COLOR]
    

    ;;
  stop)
    ;;
  force-reload|restart)
    $0 stop
    $0 start
    ;;
  *)
    echo "Usage: /etc/init.d/sensors {start|stop|restart|force-reload}"
    exit 1
esac

exit 0
Es handelt sich um das normale "lm-sensors" von debian.
Was ich dazu gewurschtelt habe ist rot geschrieben.
Habe mich dabei zuerst versucht an SuSE anzulehnen, aber deren /sbin/startproc -q ... existiert bei debian nicht.

Mein Verständnis von dem was ich da versuche beschränkt sich auf 25 Jahre alte und sehr rudimentäre "C" -Kenntnisse.

Kann mir bitte jemand weiterhelfen?
 

Rain_Maker

Administrator
Teammitglied
AW: initd/rc5.d script anpassen

Ohne das Script jetzt genau durchgelesen zu haben ==> Erste Grundregel:

In Initscripten sollte man ausfuehrbare Dateien immer mit _vollstaendigem_ Pfad aufrufen, sofern also "popen" eine ausfuehrbare Datei ist, sollte sie mit vollem Pfad aufgerufen werden, beim Auffinden des absoluten Pfades wird "which" Dein Freund sein.

Greetz,

RM
 

cal

Member
AW: initd/rc5.d script anpassen

Hallo Rain Maker,

Danke für den Hinweis.

Ich hielt "popen()" für ein shell-kommando ähnlich wie "echo"...
Dies scheint aber nicht der Fall zu sein und which liefert kein Ergebnis.

Die meisten Seiten die ich durchsucht hatte waren mal wieder in englisch und mein Problem ist daß ich Englisch nicht gut genug verstehe um immer alle Zusammenhänge zu begreifen. -Nicht daß ich das in deutsch immer würde-
Es kann also gut sein daß ich da auf einer Seite für was weiss ich was für eine Sprache gelandet war und dies nicht bemerkt habe.

Ich suche eigentlich nach einem Äquivalent zu SuSE´s "startproc" , was bei Debian wohl mit dem Start-Stop-Daemon gehandhabt wird (wenn ichs soweit richtig verstanden habe). Nur ob und wie ich den dazu benutzen könnte finde ich nicht heraus.
 
AW: initd/rc5.d script anpassen

1. Die Init-Scripte liegen unter /etc/init.d.
Unter /etc/init.d/rcX.d liegen nur die Symlinks auf die jeweiligen Scripte in der Form
Code:
[K,S]NN<Name>
K steht dabei für Stop (Verlassen des Runlevels), S für Start (Starten des Runlevels), NN für die Reihenfolge in der die Scripte gestartet bzw. gestoppt werden und <Name> ist einfach der Dateiname des Scriptes.
Siehe: man init, man update-rc.d

2. Der Default-Runlevel unter Debian ist 2 nicht 5.

3. Zum starten eines Daemons gibt es das Programm start-stop-daemon.

4. popen() ist eine C-Funktion, keine Shell-Funktion.
D.h. du kannst diese Funktion nur innerhalb eines C-Programms benutzen, nicht in einem Init-Script.

5. Existierende Scripte zu verändern halte ich nicht unbedingt für eine gute Idee.
Mach ein Kopie des Scripts und erstell dir auf der Basis ein eigenes lm-sensors-Script.


Du solltest dir auf jeden Fall einmal das Beispielscript /etc/init.d/skeleton ansehen.
 

cal

Member
AW: initd/rc5.d script anpassen

Hallo b3ll3roph0n,

1) War bekannt, nur von mir wohl zu verkürzt wiedergegeben
2) Runlevel für x = 5
3) Man start-stop-daemon hat schließlich doch noch weitergeholfen
4) Tja, lesen und verstehen....:eek:
5) script "/etc/init.d/lm-sensors" war unbenutzt, habe mit Kopie gewurschtelt.

Mit dem "skeleton" zum selbererstellen bin ich überfordert. Es reicht mit Glück halt grad mal zum abändern von bereits funktionierendem.

Fancontrol läuft jetzt wie gewünscht kurz vorm login an.

So sieht das script jetzt aus:
Code:
#!/bin/sh




PATH=/bin:/usr/bin:/sbin:/usr/sbin
PROGRAM=/usr/bin/sensors

test -x $PROGRAM || exit 0

case "$1" in
  start)
    echo -n "Setting sensors limits:"
    /usr/bin/sensors -s 1> /dev/null 2> /dev/null
    /usr/bin/sensors 1> /dev/null 2> /dev/null
    echo " done."

   [B][COLOR=Red] # Start fan control, 
      echo -n ", starting fan control: "
      start-stop-daemon -S -b --exec /usr/sbin/fancontrol

    # wait 5
[/COLOR][/B]
    

    ;;
  stop)
    ;;
  force-reload|restart)
    $0 stop
    $0 start
    ;;
  *)
    echo "Usage: /etc/init.d/sensors {start|stop|restart|force-reload}"
    exit 1
esac

exit 0
Änderungen am Original-Script in rot.

Vielen Dank für eure Hilfe

gelöst, bitte schließen
 
Status
Für weitere Antworten geschlossen.
Oben