Używanie skryptu do sterowania procesem już działającym na ekranie

0

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?

dlamblin
źródło
./~ Pewnego dnia przyjdzie mój rozmówca
dlamblin

Odpowiedzi:

1

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 i stderr, 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:

tail -f /path/to/myinputfile.txt | myprocess 2&>1 >/path/to/outputfile.txt

lub, używając tee:

tail -f /path/to/myinputfile.txt | myprocess 2&>1 | tee /path/to/outputfile.txt

I skonfiguruj wejściową pracę crona, taką jak:

5 * * * * /bin/cat "/snapshot" >> /path/to/myinputfile.txt
Doug Harris
źródło
Dzięki; Podoba mi się to rozwiązanie. myślałem screen może też wspierać coś takiego; NA PRZYKŁAD. jeśli chciałem wysłać postać lub dwie bez nowej linii tail -f byłby problem.
dlamblin