Ze względu na to, że Gnu Screen jest trudny dla Google, miałem problem ze znalezieniem odpowiedzi na to pytanie.
Jako konkretny (co próbujesz zrobić) przykład:
Uruchomienie procesu serwera (pod linuxem) uruchamia kilka wyjść (STDOUT STDERR), które mogą pobierać dane z STDIN.
Okresowo chcę wydać polecenie ( /snapshot
), aby wykonać kopię zapasową bieżącego stanu.
Chcę skonfigurować crona, aby uruchamiał polecenie, które od czasu do czasu wstawia to do STDIN dla serwera.
Do tej pory myślałem, że proces serwera może działać w oddzielnej sesji ekranowej. I myślę, że komenda exec ekranu może połączyć się z różnymi sesjami terminala pod ekranem i przekazać STDIN i STDOUT do innego procesu. Ale czytanie docs było mylące. I nie pomaga to, że mówią, że istnieje „myląca ilustracja”, aby wyjaśnić to dalej.
Jeśli ktoś to zrobił, jak określić polecenie cron, aby to osiągnąć. Do tej pory myślę (pokaż, co zrobiłeś):
5 * * * * /usr/bin/screen -p 1 -X 'exec ! echo "/snapshot"'
Ale tutaj nie wiem, czy to zadziała, czy to rzeczywiście skieruje proces serwera w oknie 1 i co się stanie po tym; czy ekran się kończy?
źródło
Odpowiedzi:
Nie sądzę, żebym w pełni zrozumiał twój konkretny przypadek użycia, ale oto możliwe podejście, które może pomóc.
Zamiast mieć zrzut procesu do
stdout
istderr
, miej te zapisane w pliku. Alternatywnie możesz użyćtee
pisać do pliku i do terminala.Również przekierowanie
stdin
za pomocątail -f
na osobnym pliku wejściowym. Utwórz zadanie cron, które zapisze nową linię do pliku wejściowego w odpowiednim przedziale czasu.Nadal możesz uruchomić swój proces
screen
jeśli chcesz okresowo sprawdzać (lub po prostu zachować je przy życiu).Rozpocznij swój proces od:
lub, używając
tee
:I skonfiguruj wejściową pracę crona, taką jak:
źródło
screen
może też wspierać coś takiego; NA PRZYKŁAD. jeśli chciałem wysłać postać lub dwie bez nowej liniitail -f
byłby problem.