3dfx.pl :: 3dfx :: offtopic :: Moje linuxowe problemy

Tresci wiadomosci nie byly edytowane. Strona zostala wygenerowana maszynowo.

#0 - Varus - 2017-10-15 22:13

Nie chciałem wątku zaśmiecać więc robię nowy.

Mam problem że skryptem w linuxie, a raczej wyświetleniem go. Mam dwa połowicznie rozwiązania, ale mnie nie zadowalają.

Chcąc mieć podgląd skryptu na ekranie, zaraz po uruchomieniu systemu (nie ma X-ów, Ubuntu) wrzuciłem go do odpalania do init.d i komendą./skrypt.sh > /dev/tty1

Działa to fajnie, bez logowania, ale nie jestem w stanie zobaczyć tego, jak łączę się z zewnątrz, poprzez ssh.

I teraz kolejna myśl, dodałem tmuxa i uruchamiam skrypt w nim. Mogę go wywołać z ssh i widzę co się dzieje, ale na komputerze oczywiście po starcie mam ekran logowania. Muszę ręcznie się zalogować i wywołać tmuxa.

Jak pogodzić te dwie rzeczy?

#1 - kazeobi - 2017-10-15 23:30

Może wypchnac to netcatem na jakiś port, a później zarówno w tmux jak i ibit.d to odczytywać?

#2 - Varus - 2017-10-15 23:47

Init.d to tylko żeby ładowało skrypt przy starcie systemu z prawami roota. Nie potrzebne jest logowanie. Jak przez port chcesz to wepchnąć? Mnie chodzi tylko o to jak wywalić działający już skrypt, na ekran "widzialny".

Ręcznie jak się zalogujesz w konsoli i odpalisz skrypt, to go widzisz i tyle. Przy starcie jak on odpala się w powłoce to już go nie widać. Nawet po zalogowaniu nie umiem się do niego dostać. To częściowo ominąłem właśnie tmuxem. Odpalam w nim skrypt komendami.

Czyli przy starcie systemu odpalany jest tmux, potem wysyłana komenda z keysem na tą konsole:
./skrypt.sh > /dev/tty2
sleep 10
chvt 2

Włączam kompa i po 20 sekundach od razu widzę działający skrypt.

Jeśli chce coś pokombinować, to zmieniam pulpit i tu wiadomo... Login hasło itp. Potem komenda tmux attach, no I tu widzę, że jest odpalany skrypt i wysłany na tty2, bez tego co się dzieje.

Tu mi to nie przeszkadza. Ale dostając się na kompa poprzez ssh, co mogę zrobić? Wszystko i nic. Tmux attach wyświetla mi info, że skrypt jest odpalany na tty2, ale tam się już nie przełączę.

A jeśli przy starcie systemu w tmuxie odpalę skrypt bez wywalania go na tty2 to poprzez ssh go wywołam. Ale z komputera z linuxem już nie mam tego komfortu, że włączę kompa i po 20 sekundach widzę skrypt. Tylko już trzeba najpierw ręcznie się zalogować i odpalić tmuxa.

#3 - Forsaken - 2017-10-16 00:26

Nie wiem czy dobrze rozumiem co chcesz uzyskać, ale może screen byłby pomocny <brak linka>

#4 - Varus - 2017-10-16 07:14

Próbowałem też screena. Te same opcje daje mi tmux. Nie udało mi się tego zrobić ani jednym ani drugim.

#5 - kazeobi - 2017-10-16 09:01

Faktycznie, ciezko zeby dwa netcaty sluchaly na jednym porcie...

a moze named pipes? (wycenzurowalem nieudane proby uzycia polecenia tee Smiley)

#6 - Jenot - 2017-10-16 22:07

Nie wiem czy dobrze zrozumiałem, ale chodzi Ci o to, żeby po wykonaniu skryptu (nawet jeśli uruchamia się przy inicie) sprawdzić co wywalił na stdout i stderr? Jeśli tak, to może pomoże dodanie czegoś takiego na początku Twojego skrypt.sh:
Code
exec 1> >  (logger -s -t $  (basename $0)) 2>&1

A potem po zalogowaniu przez ssh wystarczy Code
cat /var/log/syslog |grep skrypt.sh

Nie ma to wpływu na wyrzucanie stdout na ekran, czyli na swoim /dev/tty2 będziesz miał to samo co w syslogu, chociaż ja preferuję jednak używanie do tego tty, na których nie pojawia się login:

Albo jeszcze prościej: nohup skrypt.sh, tylko wtedy stdout nie jest wyświetlany na tty, wszystko idzie do nohup.out. Ale zawsze po zalogowaniu możesz zrobić tail -F nohup.out i widzisz na bieżąco co się dzieje.

#7 - Varus - 2017-10-17 17:38

Chodzi o to, że po starcie systemu mam mieć działający skrypt widoczny na tty bez logowania.
I jak dostaje się na tą maszynę przez ssh to też chce widzieć co wyświetla ten skrypt. Nie mogę tych dwóch rzeczy pogodzić.

Albo mam skrypt uruchomiony na tty bez logowania i nie mogę go podejrzeć przez ssh, albo mogę go podejrzeć przez ssh, ale wtedy na maszynie muszę się zalogować i odpalić tmuxa żeby go widzieć.

#8 - Jenot - 2017-10-17 18:00

No to OK. Dopisz tylko to co powyżej do skryptu. Skrypt uruchamiaj tak jak uruchamiałeś z przekierowaniem na tty. Do.bash_profile dopisz coś w stylu:
Code
tail -f /var/log/syslog |grep --line-buffered skrypt.sh

Po zalogowaniu przez ssh będziesz mial na ekranie to co chcesz (o ile oczywiście masz uprawnienia do czytania pliku syslog).

#9 - Varus - 2017-10-17 19:56

No właśnie, uprawnienia to nie problem. Ale wnioskuję, że to pozwoli mi czytać działający skrypt, wpisywany w logi. A ja muszę mieć wpływ też na ten skrypt. Czyli np wciskam z klawiatury klawisz i skrypt mi zareaguje.

Np coś takiego. Piszesz skrypt, który po uruchomieniu wyświetla Ci co 10min w nowej linijce aktualną godzinę. Dodatkowo, po naciśnięciu klawisza C z klawiatury, wyświetla Ci godzinę z momentu naciśnięcia klawisza.

I taki skrypt chce, żeby działał zaraz po starcie na tty1 bez logowania.

Jak zaloguje się na kompa z zewnątrz przez ssh, też chce wywołać ten działający skrypt i móc w niego ingerować, naciskaniem klawisza C.

To chyba dokładnie odwzorowuje to czego potrzebuje.

#10 - Jenot - 2017-10-18 21:57

OK, jeśli to program interaktywny a nie zwykły skrypt, który tylko cośtam wywala na ekran to pozostaje screen. Robisz tak:
Na początku skryptu umieszczasz linię:
Code
exec 1> >  (logger -s -p mojskrypt.output -t $  (basename $0)) 2>&1


W rc.local, czy gdzie tam uruchamiasz skrypt wpisujesz:
Code
screen -dm /path/to/skrypt.sh


W konfigu rsyslog (pewnie w /etc/rsyslog.d/50-default.conf) dodajesz linię:
Code
mojskrypt.* /dev/tty12


Output ze skryptu masz pod Alt-F12, jak się zalogujesz przez ssh to screen -r i pracujesz ze skryptem, jedyna wada to to, że na tty12 nie masz interakcji ze skryptem (musisz się lokalnie zalogować i zrobić screen -r), ale to dla mnie akurat byłaby zaleta - raczej nie chcę, żeby mi ktoś wyszedł ze skryptu uruchomionego na roocie do shella. Wink

#11 - Varus - 2017-10-18 22:02

Brzmi sensownie. Spróbuję jeszcze dodatkowo odpalać to wszystko przez tmuxa. Wtedy co prawda tak samo z lokalnego nie będę mieć interakcji z skryptem, ale odpalając tmuxa będę mógł w nim wydawać komendy np na tty1 a rezultaty oglądać na tty2.

Sprawdzę to w weekend i dam znać czy działa.

Nie jestem zaawansowanym użytkownikiem linuxa, wydaje mi się, że nie do końca to zrozumiałem Cheesy

mojskrypt.output vs skrypt.sh vs mojskrypt.*?

PS.
bawiłem się też trochę ze screenem, ale na to nie wpadłem Wink
Dzięki, mam nadzieję, że zadziała

#12 - WhitemanFX - 2017-10-21 23:57

"
można dodać do tego jak się loguje, żeby wrzucało output skryptu do motd (message of the day)
wtedy będzie miał wynik skryptu po zalogowaniu po ssh
on chce czy nie chce się logować

"

Taka rada od kumpla na szybko. Nie wiem czy dobrze zrozumiał porblem.

#13 - WhitemanFX - 2017-10-22 00:01

"

to ja bym dał coś takiego./skrypt.sh > /etc/motd do.bashrc
czyli loguje się
a to przy jego logowaniu wrzuca output komendy do ekranu powitalnego
pytanie czy wcześniej się zaloguje
czy będzie ekran powitalny Cheesy

"

#14 - Varus - 2017-11-15 17:59

WhitemanFX wrote on 22. Oct 2017 at 00:01:
"

to ja bym dał coś takiego./skrypt.sh > /etc/motd do.bashrc
czyli loguje się
a to przy jego logowaniu wrzuca output komendy do ekranu powitalnego
pytanie czy wcześniej się zaloguje
czy będzie ekran powitalny Cheesy

"


To chyba nawiązanie do trybu graficznego. W konsoli też jest ekran powitalny?

#15 - WhitemanFX - 2017-11-15 18:02

Tak w konsoli.

#16 - Jenot - 2017-11-15 18:11

/etc/motd to plik, w którym jest tekst wyświetlający się po każdym logowaniu, każdego użytkownika.

#17 - Varus - 2017-11-15 19:28

Jenot wrote on 15. Nov 2017 at 18:11:
/etc/motd to plik, w którym jest tekst wyświetlający się po każdym logowaniu, każdego użytkownika.
Czyli ta opcja odpada bo to ma być bez logowania.