Strona 1 z 1

Nietypowe zapytanie GREP - sprawdzanie procesu

: 24 września 2009, 12:13
autor: jaason
Witajcie ponownie.
Próbuję ustawić za pomocą crona sprawdzanie czy drugi proces serwera gry jest uruchomiony, jednak za każdym razem kod poniżej zwraca 0. Pomimo tego, że serwer uruchomiłem ręcznie z palca w screenie. Problemem pewnie jest zapis z myślnikiem:

Kod: Zaznacz cały

hlds_amd -game valve'
Jednak nie wiem jak do tego dobrze podejść:

Kod: Zaznacz cały

#!/bin/sh

ile_procesow=`ps -ef | grep -e hlds_amd -game valve | wc -l`
echo $ile_procesow
if [ $ile_procesow -eq "1" ]
    then
        echo "jest proces"
    else
        echo "brak procesu"

fi

: 24 września 2009, 12:59
autor: lessmian2
Sprawdź może

Kod: Zaznacz cały

`ps -ef | grep "hlds_amd -game valve"  | wc -l`

: 24 września 2009, 14:01
autor: jaason
Dziękuję za wskazówki.
Zmieniłem i zdaje się działa lepiej. Jednak pojawia się inny problem.
Gdy listują sobie procesy poleceniem

Kod: Zaznacz cały

 ps -ef
wyświetla mi bardzo długą listę procesów. Głównie wywoływany z crona skrypt opisany powyżej. Skrypt ten ma za zadanie sprawdzać co minutę czy jest uruchomiony proces serwera gry, jeśli nie to go ma stworzyć.

Oto co mi się wyświetla po wpisaniu:

Kod: Zaznacz cały

ps -ef
(mniejsza część- ale reszta wygląda podobnie)

Kod: Zaznacz cały

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 09:59 ?        00:00:00 init [2]
root      1415 30680  0 10:05 ?        00:00:00 /USR/SBIN/CRON
root      1416  1415  0 10:05 ?        00:00:00 /bin/sh -c /root/hlds_l/sprawdz_serwer >> /dev/null 2>&1
root      1423  1416  0 10:05 ?        00:00:00 /bin/sh /root/hlds_l/sprawdz_serwer
root      1438  1423  0 10:05 ?        00:00:00 /bin/sh /root/hlds_l/hlds_run -game cstrike +port 27016 +maxplayers 11 +map de_dust +exec server.cfg 
root      1570 30680  0 11:02 ?        00:00:00 /USR/SBIN/CRON
root      1571  1570  0 11:02 ?        00:00:00 /bin/sh -c /root/hlds_l/sprawdz_serwer >> /dev/null 2>&1
root      1578  1571  0 11:02 ?        00:00:00 /bin/sh /root/hlds_l/sprawdz_serwer
root      1583  1578  0 11:02 ?        00:00:00 /bin/sh /root/hlds_l/hlds_run -game cstrike +port 27016 +maxplayers 11 +map de_dust +exec server.cfg 
root      1698 30680  0 10:06 ?        00:00:00 /USR/SBIN/CRON
root      1699  1698  0 10:06 ?        00:00:00 /bin/sh -c /root/hlds_l/sprawdz_serwer >> /dev/null 2>&1
root      1701  1699  0 10:06 ?        00:00:00 /bin/sh /root/hlds_l/sprawdz_serwer
root      1706  1701  0 10:06 ?        00:00:00 /bin/sh /root/hlds_l/hlds_run -game cstrike +port 27016 +maxplayers 11 +map de_dust +exec server.cfg 
root      1854 30680  0 10:39 ?        00:00:00 /USR/SBIN/CRON
root      1861  1854  0 10:39 ?        00:00:00 /bin/sh -c /root/hlds_l/sprawdz_serwer >> /dev/null 2>&1
root      1868  1861  0 10:39 ?        00:00:00 /bin/sh /root/hlds_l/sprawdz_serwer
root      1874 30680  0 11:19 ?        00:00:00 /USR/SBIN/CRON
root      1875  1874  0 11:19 ?        00:00:00 /bin/sh -c /root/hlds_l/sprawdz_serwer >> /dev/null 2>&1
root      1876  1875  0 11:19 ?        00:00:00 /bin/sh /root/hlds_l/sprawdz_serwer
root      1882  1868  0 10:39 ?        00:00:00 /bin/sh /root/hlds_l/hlds_run -game cstrike +port 27016 +maxplayers 11 +map de_dust +exec server.cfg 
root      1893  1876  0 11:19 ?        00:00:00 /bin/sh /root/hlds_l/hlds_run -game cstrike +port 27016 +maxplayers 11 +map de_dust +exec server.cfg 
root      3107 30680  0 10:07 ?        00:00:00 /USR/SBIN/CRON
root      3108  3107  0 10:07 ?        00:00:00 /bin/sh -c /root/hlds_l/sprawdz_serwer >> /dev/null 2>&1
root      3117  3108  0 10:07 ?        00:00:00 /bin/sh /root/hlds_l/sprawdz_serwer
root      3140  3117  0 10:07 ?        00:00:00 /bin/sh /root/hlds_l/hlds_run -game cstrike +port 27016 +maxplayers 11 +map de_dust +exec server.cfg 
root      3315 30680  0 10:48 ?        00:00:00 /USR/SBIN/CRON
Wpis w crontab:

Kod: Zaznacz cały

*/1 * * * * root /root/hlds_l/sprawdz_serwer >> /dev/null 2>&1
Zdaje się powinien raz na minutę być uruchomiony jeden proces i się wyłączać, a tutaj wygląda tak jakby co raz był uruchamiany nowy, a stary nie został zamknięty. Jak z tym sobie poradzić?

: 24 września 2009, 16:15
autor: darkwater
Spróbuj dopisać exit na końcu skryptu

: 25 września 2009, 08:55
autor: mariaczi
Zerknij za poleceniem pidof. Zwraca listę PID procesu.

: 25 września 2009, 09:33
autor: PiotrSz
Jak rozumiem to co zamieściłeś na początku nie jest całym skryptem.

Możliwe że gdzieś nie domknąłeś pętli. Ewentualnie zmień powłoke na bash

Kod: Zaznacz cały

#!/bin/bash

: 25 września 2009, 10:27
autor: lessmian2
Zamiast gdybać, proszę wklej cały skrypt który sprawia problemy. To co wkleiłeś w pierwszym poście to chyba tylko część.

: 25 września 2009, 14:07
autor: jaason
To jest całość.
Niestety wklejenie na samym końcu ,,exit'' nic nie pomogło. tzn. kod oryginalny różni się tylko tym, że pod linijką:

Kod: Zaznacz cały

echo "brak procesu"

jest uruchominy serwer hlds counter-strike'a. To wszystko. Zwykłe

Kod: Zaznacz cały

./hlds_l -game cstrike itp.

: 25 września 2009, 14:22
autor: lessmian2
Czyli jednak to nie jest cały skrypt ;-) Zacznij od ubicia wszystkich niepotrzebnych procesów serwera gry. Potem dodaj na końcu linii w której jest uruchamiany serwer gry znak '&'.