Strona 1 z 1

cron i autostart serwera cs 1.6

: 07 czerwca 2010, 01:38
autor: djminiek
Witam.
Mam problem z cronem, wygląda to tak, serwer działa, chcę aby jak padnie to się włączył. Wiem jak już działa cron i zrobiłem dwa pliki do restartu, z tego forum ale coś nie działa.

Jeden zawiera:

Kod: Zaznacz cały

#/bin/bash
# uruchamianie serwera cs 1.6 po jego padzie
ps at > x
if grep -c cs1 x > 0; then
echo "serwer cs 1.6 dziala OK"
else
echo "serwer cs 1.6 nie dziala uruchamiam!"
sh csr.sh
fi
Drugi zawiera:

Kod: Zaznacz cały

#/bin/bash
cd /csserver
screen -A -m -d -S cs1 ./hlds_run -game cstrike +port 27015 +ip ****** +maxplayers 15 +exec server.cfg

w 'crontab -e' mam:

*/1 * * * * /bin/sh /restart/st.sh
I teraz działa to tak, że z konsoli jak wpisuję:

Kod: Zaznacz cały

/bin/sh /restart/st.sh
działa tylko że jak jest włączone to uruchamia się jeszcze i nie sprawdza, że jest uruchomione, crontab nie działa.
Przeczytałem chyba wszystko na forum co się dało i nie mogę sobie z tym poradzić.

: 07 czerwca 2010, 09:39
autor: xmaster
Widzę, że skorzystałeś mojego skryptu, spoko.
Nie wiem tylko w czym masz problem? Trochę to niejasno opisałeś.

: 07 czerwca 2010, 13:15
autor: db
Ustaw zmienną PATH.

: 07 czerwca 2010, 23:08
autor: djminiek
xmaster, więc tak, mój problem polega na tym, że ten skrypt uruchamia się, po pierwsze tylko z konsoli. Crontab nie działa, a po drugie nie sprawdza mi czy serwer już działa tylko uruchamia się kolejny raz.

: 08 czerwca 2010, 12:43
autor: Bastian
djminiek pisze:xmaster, więc tak, mój problem polega na tym, że ten skrypt uruchamia się, po pierwsze tylko z konsoli. Crontab nie działa, a po drugie nie sprawdza mi czy serwer już działa tylko uruchamia się kolejny raz.

Uściślijmy bo trochę nielogicznie formułujesz składnię.

Skrypt działa odpaleniu z konsoli połowicznie gdyż nie sprawdza czy serwer już chodzi, a wpisany do crona, nie działa w ogóle. Tak to rozumiem. Zatem są 2 problemy:

a) z samym skryptem
b) z wywoływaniem skryptu przez crona

ad.a)

Kod: Zaznacz cały

#/bin/bash
# uruchamianie serwera cs 1.6 po jego padzie
ps at > x
if[ `grep -c cs1 x` > 0 ]; then
echo done
else
sh csr.sh
fi
ad b) Wklej wynik:

Kod: Zaznacz cały

cat /etc/crontab
Bo coś bez sensu masz tam to /bin/sh skoro zmienna PATH powinna być ustawiona. Zatem moim zdaniem:

Kod: Zaznacz cały

*/1 * * * * root /restart/st.sh
Pamiętaj, żeby to była bezwzględna ścieżka (liczę, że jest) do pliku oraz żeby ustawiony był użytkownik, który ma prawa wykonywalności dla tego pliku (w moim przykładzie root).

: 08 czerwca 2010, 21:12
autor: djminiek
To wynik z

Kod: Zaznacz cały

cat /etc/crontab

Kod: Zaznacz cały

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
*/1 * * * * root /restart/st.sh
36 * * * * root    cd / && run-parts --report /etc/cron.hourly
54 3 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
2 0 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
23 0 3 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


#

: 09 czerwca 2010, 12:27
autor: Bastian
Nadal nie działa ?

: 09 czerwca 2010, 21:32
autor: djminiek
Nadal nie działa tak jakbym chciał. Czyli niby serwer się uruchamia i sprawdza co minutę jak zabiję proces to też się podnosi ale jak serwer sam padnie, zawiesi się to nie podnosi się już. A jak wpisuję:

Kod: Zaznacz cały

screen -ls
to jest że działa. Już tego nie rozumiem.

: 09 czerwca 2010, 22:59
autor: Bastian
To pewnie dlatego, że twój skrypt nie rozpoznaje czy serwer cs działa czy nie...Tzn. pad serwera cs nie oznacza ubicie jego procesu. Proces nadal trwa. Prawdopodobnie skrypt nie działa z twoim zamierzeniem. Do czego służy to polecenie?

Kod: Zaznacz cały

screen -ls
Moim zdaniem trzeba by było, znaleźć jakieś polecenie zwracające status serwera (piszesz własnie o screen -ls, nie wiem czy jest własciwe, w szczegolnosci ze piszesz, że nie działa zgodnie ze stanem faktyczym), ten status byłby potokiem przekazywany do grepa, i jeśli ten zwraca prawdę (np wyszukuje ciąg oznaczający niedziałający, zawieszony serwer) to odpala restartujące polecenie.