Aus einer Pipe lesen, in eine Datei schreiben
Wenn der Dämon Eingaben lesen soll, die von einem beliebigen Prozess erzeugt wurden, müssen Sie diesen Prozess mit einer Pipe verbinden. Hier gibt der beliebige Prozess das Echo von Befehlen wieder und wird in einem anderen Kontext ausgeführt. Erstellen Sie also eine Named Pipe (in Unix-Kontexten oft als Fifo bezeichnet).
mkfifo /var/run/daemon.fifo
</var/run/daemon.fifo /path/to/daemond --option >daemon.log
Und schreiben Sie einfach Befehle in die Pipe:
echo 'FORWARD 10' >/var/run/daemon.fifo
echo 'LEFT 72' >/var/run/daemon.fifo
Es ist jedoch unwahrscheinlich, dass dies so funktioniert: Es besteht eine gute Chance, dass der Dämon beendet wird, wenn er ein Dateiende an seiner Standardeingabe sieht. Dies geschieht, sobald der erste Prozess, der in die Pipe schreibt, beendet wird. Sie können tail -fdieses Problem vermeiden.
</var/run/daemon.fifo tail -c +1 -f | {
echo $$ >/var/run/daemon.pid
exec /path/to/daemond --option >daemon.log
}
Bei einigen tailImplementierungen kann es sein, dass Sie durch Pufferung gebissen werden: Der tailProzess wartet, bis er genügend Bytes angehäuft hat, um eine Ausgabe auszugeben. Ich denke nicht, dass dies in der POSIX-Toolbox lösbar ist. Wenn dies ein Problem ist, verwenden Sie ein einfaches C-, Perl- oder Python-Programm. Soweit ich das tailbeurteilen kann, sind die von GNU Coreutils (wie sie unter Linux und anderswo zu finden sind) in dieser Hinsicht sicher.
Wenn Sie den Dämon stoppen, echo >/var/run/daemon.fifowird der tailProzess abgebrochen.
Programm im Bildschirm starten
Anstatt den Daemon direkt von Ihrem Service Manager aus aufzurufen (verwenden Sie wirklich nur SysV init oder etwas Zusätzliches wie Wrapper-Skripte oder Upstart?), Rufen Sie auf
screen -c daemon.screenrc -L -d -m -S daemon_name /path/to/daemond --option
Da der Daemon kein untergeordneter Prozess des Service Managers ist, müssen Sie sicherstellen, dass ein Signal an den richtigen Prozess gesendet wird. Wie das geht, hängt davon ab, wie und von was der Daemon gestartet wird.
Es ist technisch möglich , einen laufenden Prozess an ein Terminal anzuschließen, aber es besteht die Gefahr, dass Sie das Programm zum Absturz bringen. Dies ist also definitiv für ein Produktionssystem nicht der Fall.
Mit dieser -LOption schreibt der Bildschirm alles, was in seinem Fenster angezeigt wird, in eine Datei. Der Dateiname wird daemon.screenrcmit der logfileDirektive angegeben.