Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Problemy ze screenem  (Przeczytany 11351 razy)

~xD

  • Gość
Problemy ze screenem
« dnia: 2010-08-28, 19:23:10 »
Witam,
postanowiłem nauczyć się czegoś nowego i zabrałem się za pisanie panelu do uruchamiania serwerów.
Jednak spotkałem się z pewnym problemem.

Uruchamiam serwer komendą:

screen -c plik_rc -L -dmS nazwa_screena ./hlds_run [..]

Serwer ładnie się uruchamia, screen działa.

Mój problem polega na tym, że nie mogę przesłać komendy do screena ze skryptu sh.

PLIK_TEMP=`mktemp /temp/nazwa_screena.XXXXXX
echo $KOMENDA > $PLIK_TEMP
screen -x nazwa_screena -X readbuf $PLIK_TEMP
screen -x nazwa_screena -X paste .
rm $PLIK_TEMP

Pewnie próbował bym go zmienić, tylko zauważyłem pewną rzecz. Gdy połączę się przez program putty do tego screena i klikne CTRL+a d screen przechodzi na detached (tak jak to było po uruchomieniu). Ale dziwnym trafem mój skrypt zaczyna działać i komendy wysyłają się na serwer.

I tu chciał bym was prosić o pomoc, czy macie jakiś pomysł co mógłbym zrobić aby to działało od razu po uruchomieniu serwera? Nie wiem, czy trzeba jakiś osobny proces jeszcze utworzyć, otworzyć jakiś port, pomysły mi się już skończyły..

___________
arctgx: tytuł

arctgx

  • Gość
Problemy ze screenem
« Odpowiedź #1 dnia: 2010-08-29, 03:43:09 »
Słabo znam screena i na Twoim przykładzie próbowałem zorientować się, co w ogóle chcesz zrobić. Jasne: zawartość pliku $PLIK_TEMP ładujesz do bufora i wklejasz. Nie udało mi się tylko odtworzyć sytuacji, kiedy ta zawartość zostaje przez coś zinterpretowana.

Problem ten można chyba okroić do wersji bez screena - zdaje się on polegać na tym, że wklejonych poleceń nie ma "kto" interpretować. Zdaje się być identyczny do sytuacji, gdy odpalisz xterm -e xclock i w uruchomionym xtermie próbujesz wpisać lu wkleić cokolwiek: terminal przyjmuje i wyświetla te znaki.

Xclock nie posiada powłoki, więc na wyświetleniu się kończy. O tym czy hlds_run samodzielnie potrafi przyjmować jakieś polecenia, nie mam pojęcia - może to jest klucz problemu.

Jeśli polecenia z pliku $PLIK_TEMP to np. polecenia basha, wtedy zamiast hlds_run odpal bash, a dopiero później z użyciem -X - samego hlds_run i polecenia basha do wklejenia.

P.S. Czy nie prościej zamiast mktemp, readbuf i paste dać opcję
-X stuff $'polecenie\\n'
? Zamiast pięciu linijek masz jedną.

~xD

  • Gość
Problemy ze screenem
« Odpowiedź #2 dnia: 2010-08-29, 04:12:51 »
Ale serwery muszą być odpalane na screenach, bo inaczej po wyłączeniu konsoli przestaly by działać. Twój przykład niestety też nie działa.

arctgx

  • Gość
Problemy ze screenem
« Odpowiedź #3 dnia: 2010-08-29, 14:13:34 »
Czy napisałem gdzieś, by hlds_run odpalić bez screena? Przecież piszę o opcji screena -X w tym celu. Serwer odpalasz w ten sam sposób, co późniejsze polecenia. Wydaje mi się, że w pierwszym poście napisałem wystarczająco. Może napisz, w jaki sposób robiłeś to, co się nie udało.

~xD

  • Gość
Problemy ze screenem
« Odpowiedź #4 dnia: 2010-08-29, 22:55:14 »
No po prostu uruchamiałem skrypt komenda: ./nazwa_pliku.sh polecenie

A to: -X stuff $'polecenie\\n' właśnie nie działa. Mi chodzi o to aby do uruchomionego już screena po jakimś czasie przesyłać polecenia.
Sądzę że trzeba ustawić jakąś sesję, dostęp, otworzyć jakiś port tak jak to robi program putty przy połączeniu ze screenem. Bo po połączeniu przez putty i rozłączeniu się mój skrypt zaczyna działać.

arctgx

  • Gość
Problemy ze screenem
« Odpowiedź #5 dnia: 2010-08-29, 23:26:28 »
Cytat: ~xD
A to: -X stuff $'polecenie\\n' właśnie nie działa.
Mam cichą nadzieję, że nie wklepałeś go "na pałę" tylko przynajmniej na wzór swoich poprzednich poleceń. To przecież (jak napisałem) tylko opcja, a zatem fragment polecenia.

Skoro piszesz o uczeniu się czegoś nowego, doceniam to i nie podsuwam gotowców. Sam przed napisaniem odpowiedzi wykonałem (też mając ochotę się czegoś nauczyć) działający przykład, by nie wrzucać tu pustosłowia.

~xD

  • Gość
Problemy ze screenem
« Odpowiedź #6 dnia: 2010-08-30, 00:49:33 »
Wiem, że to fragment. Sprawdziłem wiele opcji i jakoś mi nie zadziałało. Znalazłem też polski manual do screena ale też mi w niczym nie pomógł.

Możesz mi jeszcze coś podpowiedzieć? :)

arctgx

  • Gość
Problemy ze screenem
« Odpowiedź #7 dnia: 2010-08-30, 01:08:51 »
screen -d -S HL
screen -x HL -X stuff $'hlds_run\\n'
screen -x HL -X stuff $'ls\\ndf\\npolecenie_dla_lhds\\n'
Żeby widzieć na żywo, jak to działa, podepnij się do sesji HL w jednym oknie, a polecenia na wzór drugiej i trzeciej linijki wklep z innego okna.

~xD

  • Gość
Problemy ze screenem
« Odpowiedź #8 dnia: 2010-08-30, 18:05:12 »
Ok, musiałem jeszcze coś poprawić ale działa. Wielkie dzięki:) Jak byś potrzebował kiedyś pomocy z PHP/MYsql/Ajaxa to pisz, postaram się odwdzięczyć:)

~xD

  • Gość
Problemy ze screenem
« Odpowiedź #9 dnia: 2010-08-31, 00:44:02 »
Mam kolejny problem.
Jeżeli uruchomie screena na rocie, to skrypt działa. A jeżeli na innym użytkowniku to już nie. Nawet jeżeli użyje sudo -u user ./skrypt.sh to nadal nic.
Chodzi o to, że z pod php łączę się do skryptu przez ssh i podaje hasło do root'a. Nie mam możliwości zalogowania się z pod innych użytkowników. Masz jakiś pomysł, próbowałem przez dodanie w pliku konfiguracyjnym root'owi uprawnień komendą: addacl i uruchmianie serwera jako multi ale nic nie pomaga.

arctgx

  • Gość
Problemy ze screenem
« Odpowiedź #10 dnia: 2010-08-31, 01:17:43 »
W tej chwili nie znajdę czasu na zabawę screenem. Napiszę tylko tyle, że działa mi to co wyżej oraz multiuser wtedy, gdy robię wszystko jako jeden (na zwykłym sprawdzałem) użytkownik.

ubu59

  • Gość
Problemy ze screenem
« Odpowiedź #11 dnia: 2010-08-31, 08:57:15 »
Witam!
Cytat: ~xD
Mam kolejny problem.
Jeżeli uruchomie screena na rocie, to skrypt działa. A jeżeli na innym użytkowniku to już nie. Nawet jeżeli użyje sudo -u user ./skrypt.sh to nadal nic.
Chodzi o to, że z pod php łączę się do skryptu przez ssh i podaje hasło do root'a. Nie mam możliwości zalogowania się z pod innych użytkowników. Masz jakiś pomysł, próbowałem przez dodanie w pliku konfiguracyjnym root'owi uprawnień komendą: addacl i uruchmianie serwera jako multi ale nic nie pomaga.
Nie znam screena, lecz tu widzę kilka możliwych przypadków:

1. Jeśli odpalasz przez ./skrypt to plik skrypt jest w bieżącym katalogu i ten użytkownik ma prawo do uruchomienia pliku?
2. Sprawdź gdzie jesteś (pwd) po wydaniu polecenia "sudo -u user ./skrypt". Wydaje mi się że możesz być przeniesiony do katalogu /home/user .

Pozdrawiam!

~xD

  • Gość
Problemy ze screenem
« Odpowiedź #12 dnia: 2010-09-01, 22:30:30 »
Cytat: ubu59
Witam!
Cytat: ~xD
Mam kolejny problem.
Jeżeli uruchomie screena na rocie, to skrypt działa. A jeżeli na innym użytkowniku to już nie. Nawet jeżeli użyje sudo -u user ./skrypt.sh to nadal nic.
Chodzi o to, że z pod php łączę się do skryptu przez ssh i podaje hasło do root'a. Nie mam możliwości zalogowania się z pod innych użytkowników. Masz jakiś pomysł, próbowałem przez dodanie w pliku konfiguracyjnym root'owi uprawnień komendą: addacl i uruchmianie serwera jako multi ale nic nie pomaga.
Nie znam screena, lecz tu widzę kilka możliwych przypadków:

1. Jeśli odpalasz przez ./skrypt to plik skrypt jest w bieżącym katalogu i ten użytkownik ma prawo do uruchomienia pliku?
2. Sprawdź gdzie jesteś (pwd) po wydaniu polecenia "sudo -u user ./skrypt". Wydaje mi się że możesz być przeniesiony do katalogu /home/user .

Pozdrawiam!
Nie, to nie to, bo skrypt się uruchamia. Mam komendę echo i pokazuje się informacja, że skrypt się uruchomił.

ubu59

  • Gość
Problemy ze screenem
« Odpowiedź #13 dnia: 2010-09-02, 08:15:27 »
Witam!
Cytat: ~xD
Nie, to nie to, bo skrypt się uruchamia. Mam komendę echo i pokazuje się informacja, że skrypt się uruchomił.
Sorry, ale nie podałeś jak się to objawia, więc zacząłem od najprostrzej przyczyny.

Następną są sprawy środowiska. Przyczyną może być brakująca zmienna środowiskowa (która jest na koncie roota a nie na koncie użytkownika) dostęp do katalogów (/root, /sbin, inne).

W manualu sreena w sekcji DOSTOSOWYWANIE
 http://www.linux.pl/man/index.php?command=screen jest coś takiego wymienione. Są zmienne środowiskowe ($SCREENDIR, $SYSSCREENRC, $SYSSCREENRC) i katalogi z których program wczytuje dane. Może tu leży przyczyna?

Pozdrawiam

~xD

  • Gość
Problemy ze screenem
« Odpowiedź #14 dnia: 2010-09-05, 23:09:24 »
Pojawia mi się coś takiego
There is a screen on:

5542.CS_195.242.134.6_27095 (08/29/10 23:24:02) (Detached)
There is no screen to be detached matching CS_195.242.134.6_27095.
A komenda się nie przesyła.

A tu zrzut pliku:
 
SCREEN_NAZWA="$1"
shift 1
KOMENDA="$@"

if [ "`screen -list | grep "$SCREEN_NAZWA"`" ]
 then
  screen -d -S $SCREEN_NAZWA
  screen -x $SCREEN_NAZWA -X stuff $'hlds_run\\n'
  screen -x $SCREEN_NAZWA -X stuff $'ls\\ndf\\n'$KOMENDA'\\n'

  echo "wykonano komende"
 else
  echo "nie znaleziono screena"
 fi