2016-06-29 20 views

Antwort

2

Sie benötigen einen Wrapper-Shell-Skript, das Hintergründe Ihr Programm erstellen und die PID $! mit erfasst und dann die Hülle Shell-Skript auf die daemon Funktion übergeben.

Es kann sein, elegantere Möglichkeiten, um ein Programm zu daemonize ohne die Funktion daemon von /etc/rc.d/init.d/functions sourced zu verwenden, aber diese Frage/Antwort ist spezifisch über diese daemon Funktion. [2]


Hier ist das niedrige Niveau Schritt für Schritt, warum:

Ich werde sleep verwenden [1] als standin für jedes Programm, das Sie wünschen daemon von/etc sourced mit der Funktion daemonize /rc.d/init.d/Funktionen.

Sie müssen ein Wrapper Shell-Skript mit den Hintergründen sleep erstellen und erhalten die PID über $!. So zum Beispiel Ihr sleep_wrapper.sh wäre:

#!/bin/bash 
sleep 100 & 
PID=$! 
echo $PID 

Dann übergeben Sie diese Wrapper daemon über:

daemon sleep_wrapper.sh 

Wenn Sie naiv versuchen daemon sleep 100 von PID=$! gefolgt rufen Sie nicht die PID des bekommen sleep Prozess, sondern:

  • Sie werden die PID erhalten für runuser
  • runuser die
  • schließlich bash Prozess laicht bashsleep

laicht [1] Die meisten Binäranwendungen nicht selbst Hintergrund und so ist sleep eine gute standin für dieses Beispiel. Um dies an Ihre Situation anzupassen, ersetzen Sie bitte sleep mit dem Programm, das Sie verwenden möchten.

[2] Scheint, es sollte bessere Möglichkeiten zur Daemonisierung geben, die nicht die Verwendung dieser spezifischen Daemon-Funktion beinhalten.

+0

Ist das nicht offensichtlich, brauchte es wirklich ein Q & A? – 123

+1

@ 123 Wenn du einen Blick auf dein Profil schaust, sieht es so aus, als ob du mit Bash sehr erfahren bist und vielleicht ist das offensichtlich. Aber für mich ist das definitiv nicht offensichtlich. Das erste Mal, als ich diese Funktion benutzt habe, habe ich es selbst falsch benutzt und deshalb möchte ich nicht, dass andere dasselbe Problem haben.(Außerdem gibt es fast keine Dokumentation, und die Informationen, die Sie bei google oder stackoverflow finden, sprechen normalerweise von einem anderen "Daemon" und so kann der naive Googler diese Informationen mit diesem speziellen 'Daemon' von Redhat /etc/rc.d/init verbinden .d/Funktionen.) –

+0

Eh, fair genug :) – 123