# Script als init-Script ausführen

## Obelix

Hi,

im Handbuch zu gentoo steht, man solle kein Script in einem init-Script starten, das dann Services startet und sich selbst beendet.

Jetzt habe ich halt genau das Problem:

Ich nutze eine Software, die nicht per Portage und fertigem init-Sctipt kommt, aber selbst ein Script mitbringt, das alles startet und alle Variablen setzt, die gesetzt sein müssen. Das Script ist auch nicht gerade kurz, sodass es nicht wirklich einfach wäre zu sagen, man kopiert eben alles in ein init-Sctipt um.

Gibt es einen sauberen Weg, wie ich ein init-Script schreibe, das eigentlich nur ein shell Script startet? Und am besten wäre es, wenn das dann auch mit "stop" und "restart" klappen würde.

Ich habe es vor einigen Monaten schon mal versucht, einfach aufzurufen, aber ein stop ging dann nicht, geschweige denn ein restart. Und bevor ich wieder ewig dran hinbastle dachte ich, ich frag mal nach, ob mir da jemand den richtigen Weg weisen kann...

Danke an alle, die sich Gedanken machen...

Obelix

----------

## schotter

Hi,

ich denke http://www.gentoo.org/doc/en/openrc-migration.xml koennte dein Freund sein bzw. etwas genauer:

 *Quote:*   

> local.start and local.stop
> 
> With OpenRC, /etc/conf.d/local.start and local.stop are deprecated. During the migration to OpenRC, the files are moved to /etc/local.d and gain the suffix .start or .stop. OpenRC then executes those in alphabetic order.

 

Aber ein start-stop-Skript ist das natuerlich auch nicht, vllt aber ein Anfang^^

----------

## slick

Das nachfolgende ist ein minimales Initscript. Das bastelst einfach für dein Programm um. Wichtig ist das der Programmaufruf in stop() das Programm auch wieder vollständig stoppt. depend() ist IMHO optional, kannst aber mit Abhängigkeiten befüllen. chmod +x nicht vergessen. restart() brauchst nicht angeben wenn er einem stop() + start() entspricht, das machst das initscript selbst. Ansonsten schau dir andere initscripts an wie du das reinfummelst.

```
#!/sbin/runscript

depend() {

   need XXX

   use XXX

}

start() {

   ebegin "Starting MyProgram"

   #startscript aufrufen

   eend $?

}

stop() {

   ebegin "Stopping MyProgram"

   #stopscript aufrufen

   eend $?

}
```

----------

## Obelix

danke für die Tipps. Das mit dem Init-Script an und für sich ist mir schon klar. Trotzdem Danke!

Vielleicht habe ich mich zu ungenau ausgedrückt. Ich versuchs nochmal:

Für die Steuerung von KNX/EIB Hausautomatisierungssystemen haben schlaue Menschen eine Software geschrieben (OpenRemote). Einer von ihnen hat eine Serverkomponente gemacht, die mit dem System kommuniziert. Dieser "Server" benötigt viele Komponenten, von denen eigentlich alle mitgebracht werden. Um diesen Server zu starten gibt es ein Script, das hat 368 Zeilen. Man startet es mit Parameter, z.B. "run" (dann bleibt es in der shell stehen), oder "start" (damit läuft es im Hintergrund) und "stop" (damit beendet man den Hintergrundprozess)

Wenn ich im gentoo Initscript wiederum dieses Script aufrufe, dann geht das nicht. Es heißt auch in der gentoo doku, dass man keine anderen Scripte aufrufen soll.

Jetzt wäre meine Hoffnung gewesen, dass findige Köpfe vielleicht einen Trick kennen, wie man es doch schafft sauber (sic!) ein anderes Script aufzurufen. Denn ich möchte nur ungerne das 368 Zeilen lange Sctipt zerlegen und in ein Init-Script packen. Zumal dieses Script mit relativen Pfaden arbeitet, und ich dann alles umschreiben müßte...

Gruß

Obelix

----------

## bell

Wird das Skript manuell als ein User oder als root aufgerufen?

Als root: Mache mal in Deinem Skript folgendes rein 

```
source /etc/profile

/deinscript start
```

 rein. Damit hast Du schonmal alle Umgebungsvariablen für das Skript verfügbar, falls irgend was davon benötigt wird.

Damit es als User läuft etnsprechend:

```
su -lc 'source /etc/profile; /deinscript start' deinscriptuser
```

----------

