Obecnie uruchamiam program konsoli serwera na ekranie, ponieważ muszę go zarówno przeczytać, jak i czasami wysyłać polecenia.
Chciałbym uruchomić aplikację jako demon w tle (start / stop przy pomocy init).
Mogę tail -f
zalogować dziennik, ale to nie pozwoli mi przesłać danych wejściowych do procesu.
Czy jest jakiś sposób na skonfigurowanie tego, aby móc zarówno czytać, jak i wysyłać dane wejściowe, ale nadal mieć to w tle?
Chciałbym również móc wysyłać dane wejściowe do demona również z różnych procesów (na przykład skrypt powłoki, który mógłby wysłać polecenie „Stop \ n”).
scripting
shell-script
tail
Bill K.
źródło
źródło
Odpowiedzi:
Odczyt z potoku, zapis do pliku
Jeśli chcesz, aby demon odczytał dane wygenerowane przez dowolny dowolny proces, musisz podłączyć ten proces do potoku. Tutaj arbitralny proces polega na powtarzaniu poleceń i będzie przebiegał w innym kontekście. Stwórz więc nazwany potok (często nazywany fifo w kontekstach unixowych).
I po prostu napisz polecenia do potoku:
Jest jednak mało prawdopodobne, aby działało tak, jak jest: istnieje duża szansa, że demon zakończy działanie, gdy zobaczy koniec pliku na standardowym wejściu, co nastąpi natychmiast po zakończeniu pierwszego procesu zapisywania w potoku. Możesz użyć,
tail -f
aby uniknąć tego problemu.W przypadku niektórych
tail
implementacji możesz zostać ugryziony przez buforowanie:tail
proces zaczeka, aż zgromadzi wystarczającą ilość bajtów, aby wyemitować dane wyjściowe. Nie sądzę, że można to rozwiązać w przyborniku POSIX; jeśli to jest problem, użyj trywialnego programu C, Perl lub Python. O ile mogę powiedzieć,tail
z GNU coreutils (tak jak w Linuksie i gdzie indziej) jest bezpieczny pod tym względem.Gdy zatrzymasz demona,
echo >/var/run/daemon.fifo
zabijetail
proces.Uruchomienie programu na ekranie
Zamiast wywoływać demona bezpośrednio z menedżera usług (czy naprawdę używasz tylko SysV init, czy czegoś dodatkowego, takiego jak skrypty opakowania lub Upstart?), Wywołaj
Ponieważ demon nie będzie procesem potomnym menedżera usług, należy upewnić się, że wysłano sygnał do właściwego procesu. Jak to zrobić, zależy od tego, w jaki sposób demon jest uruchamiany i od czego.
Z technicznego punktu widzenia możliwe jest dołączenie działającego procesu do terminala, ale istnieje ryzyko awarii programu, więc zdecydowanie nie jest to system produkcyjny.
Ta
-L
opcja powoduje, że screen zapisuje do pliku wszystko, co pojawia się w jego oknie. Nazwa pliku jest podana wdaemon.screenrc
zlogfile
dyrektywą.źródło
stuff
polecenia ). Ale nie potrzebujesz tutaj narzutu (przetwarzania, ale przede wszystkim funkcji poznawczych) terminala, potok jest prawie wystarczający (wystarczy z małym procesem przekazywania ignorującym koniec pliku). Możesz trochę poeksperymentować z terminalem<fifo cat
lub<fifo tail -f | cat
w jednym terminalu iecho >fifo; echo >fifo
na drugim; Myślę, że wszystko będzie dobrze.