2017-02-28 3 views
1

Ich habe versucht, in OpenWRT zu erzeugen und Endlos-Schleife, und ich habe es gelungen:Init Endlosschleife beim Booten (Shell/Openwrt)

#!/bin/sh /etc/rc.common 
while [ true ] 
do 
    # Code to run 
    sleep 15 
done 

Dieser Code wie ein Zauber funktioniert, wenn ich es ausführen als ./Skript. Ich möchte jedoch, dass es von selbst startet, wenn ich meinen Router einschalte. Ich habe das Skript in /etc/init.d platziert und es mit chmod +x script aktiviert.

Unabhängig davon startet das Programm überhaupt nicht. Meine Vermutung ist, dass ich dieses Skript nicht beim Hochfahren ausführen sollte, sondern ein Skript, das dieses andere Skript aufruft. Ich bin nicht in der Lage, das auszuarbeiten.

Jede Hilfe wäre willkommen.

Antwort

2

Wie Ich habe in meinen früheren Projekten Init-Skripte von OpenWRT durcheinander gebracht. Ich möchte zur Antwort von Rich Alloway beitragen (für diejenigen, die wahrscheinlich von der Google-Suche hierher kommen). Seine Antwort bezieht sich nur auf "traditionelle SysV-Stil-Init-Skripte", wie es in der Seite erwähnt wird, die er Link Init Scripts gab.

Es gibt einen neuen Prozessverwaltungsdämon, Procd, den Sie möglicherweise in Ihrer OpenWRT-Version finden. Leider ist die Dokumentation noch nicht abgeschlossen. Procd Init Scripts.

Es gibt kleine Unterschiede wie sie in ihrer Dokumentation darauf hingewiesen:

  • procd Dienste im Vordergrund laufen erwartet,
  • Verschiedene shebang,
  • Zeile: #!/Bin/sh /etc/rc.common explizit verwenden procd USE_PROCD = 1
  • start_service() anstelle von Start()

Ein einfacher Init-Skript für procd würde wie folgt aussehen:

#!/bin/sh /etc/rc.common 

# it is run order of your script, make it high to not mess up with other init scripts 
START=100 

USE_PROCD=1 

start_service() { 
    procd_open_instance 
    procd_set_param command /target/to/your/useless/command -some -useless -shit -here 
} 

ich einige blog post darüber geschrieben habe, während vor, die helfen kann.

1

Sie müssen eine Datei in /etc/rc.d/ mit einem Sxx Präfix haben, damit das System das Skript beim Booten ausführt. Dies wird normalerweise erreicht, indem das Skript in /etc/init.d und ein Symlink in /etc/rc.d auf das Skript zeigt.

Die S zeigt an, dass das Skript beim Start ausgeführt werden soll, während die xx die Reihenfolge bestimmt, in der das Skript ausgeführt wird. Skripte werden in aufsteigender Reihenfolge ausgeführt: S10boot läuft vor S40network und S50cron läuft vor S50dropbear.

Beachten Sie, dass das System möglicherweise nicht mit dem Skript, das Sie hier angezeigt haben, weiter startet!

/etc/init.d/rcS ruft jedes Skript sequenziell auf und wartet darauf, dass das aktuelle beendet wird, bevor das nächste Skript aufgerufen wird. Da Ihr Skript eine Endlosschleife ist, wird es nie beendet und rcS kann den Startvorgang möglicherweise nicht abschließen.

/etc/rc.common Einschließlich wird nützlicher, wenn Sie Funktionen in Ihrem Skript wie start() verwenden, stop(), restart(), etc, und fügen Sie START und STOP Variablen, die beschreiben, wenn das Skript sollte beim Booten/shutdown ausgeführt werden.

Ihr Skript dann verwendet werden, kann sich durch die Schaffung oder das Entfernen der Symlink beim Booten zu aktivieren und deaktivieren: /etc/init.d/myscript enable

Siehe auch OpenWRT Boot Process und Init Scripts

-Rich Alloway (RogueWave)