# [Solved] startup script und pid file

## Obelix

Hallo,

ich bräuchte bitte mal Unterstützung bei einem startup script.

Ich habe synergy laufen und möchte das gerne beim Systemstart mitstarten.

Dazu habe ich mir die Anleitung durchgelesen und das startup script erst mal so übernommen. Nach einer kleinen Änderung (wegen deprecated -c) schien erst mal alles zu laufen.

Allerdings kann ich per "/etc/init.d/synergy stop" das ganze nicht mehr anhalten, weil das pid file einen anderen Wert aufweist, als der Prozess eigentlich hat.

Jetzt habe ich schon verschiedenes getestet:

--make-pidfile mitgeben oder auch nicht mitgeben

--background mitgeben oder auch nicht

verschiedene Optionen aus dem Standard-Aufruf weglassen

hat alles nix gebracht. Entweder bekomme ich gar kein pid file mehr, oder der Inhalt ist eine andere ID als die des Prozesses.

Wie bekomme ich denn nun den richtigen Wert in das pid file, dass auch ein "stop" alles wieder korrekt aufräumt und status nicht sofort sagt "crashed"?

hier noch das Script als Ganzes:

```
#!/sbin/runscript

# Copyright 1999-2012 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

depend() {

    use xdm net

}

start() {

    ebegin "Starting synergys"

    # the following line might be necessary to allow the connection to the x-server

    export XAUTHORITY=/home/${SYNERGY_USER}/.Xauthority

    start-stop-daemon --start -b -v -p /var/run/synergys.pid -m -x ${SYNERGY_EXEC} -- ${SYNERGY_OPTS}

    #start-stop-daemon --start --make-pidfile --pidfile /var/run/synergys.pid --exec ${SYNERGY_EXEC} -- ${SYNERGY_OPTS}

    eend $? "Failed to start synergys"

}

stop() {

    ebegin "Stopping synergys"

    start-stop-daemon --stop -x ${SYNERGY_EXEC} --pidfile /var/run/synergys.pid -q

    eend $? "Failed to stop synergys"

}
```

----------

## Obelix

...ich weiß inzwischen ein wenig mehr:

synergys scheint nach dem Start einen fork() zu machen, was dazu führt, dass der Prozess, dessen ID der start-stop-daemon in das PID file einträgt, später nicht mehr da ist. Nur noch die ID eines child-Prozesses, der nach dem fork() noch läuft.

Was ich versucht habe, ist im Script nach dem start-stop-daemon noch einen Befehl abzusetzen, der dann mittels "pgrep synergys" die echte pid ausliest und in das pidfile schreibt. Allerdings kommt der Befehl zu schnell, also läuft noch der ursprüngliche Prozess (ich erwische ihn also noch vor dem fork()).

Außerdem führt der Befehl dazu, dass das Script mit einem Fehler abbricht.

Weiß wirklich niemand Rat?

----------

## tomhog

schreib doch den stop-Teil so um, daß du die pgrep-PID nimmst und nicht die dort gespeicherte.

----------

## Obelix

 :Smile:   sehr pragmatisch, aber effektiv.

Das stop() klappt schon mal ganz gut, leider sagt status() noch *crashed*

gelegentlich versuche ich mal den status()-Teil aus dem init script zu basteln und werde dann das Ergebnis hier posten

----------

## Obelix

So. Fertig.

Hier also das komplette Script für den synergy Server. Leider sieht die status() Meldung etwas anders aus, als bei den anderen Scripten, weil bei den anderen Scripten die status() section nicht gefüllt ist. Aber der Zweck ist erfüllt.

Für Verbesserungsvorschläge bin ich immer offen  :Wink: 

```
#!/sbin/runscript

# Copyright 1999-2012 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

depend() {

    use xdm net

}

start() {

    ebegin "Starting synergys"

    # the following line might be necessary to allow the connection to the x-server

    export XAUTHORITY=/home/${SYNERGY_USER}/.Xauthority

    start-stop-daemon --start --make-pidfile --pidfile /var/run/synergys.pid --exec ${SYNERGY_EXEC} -- ${SYNERGY_OPTS}

    eend $? "Failed to start synergys"

}

status() {

    ebegin "Synergy Server Status"

    pgrep synergys > /var/run/synergys.pid

    read -r PID < "/var/run/synergys.pid"

    eend $? "not running"

}

stop() {

    ebegin "Stopping synergys"

    pgrep synergys > /var/run/synergys.pid

    start-stop-daemon --stop -x ${SYNERGY_EXEC} --pidfile /var/run/synergys.pid -q

    eend $? "Failed to stop synergys"

}
```

----------

## RAPHEAD

Hatte ein ähnliches problem und mir hat dein Post geholfen.

Danke

----------

