Jak uruchomi

Konfiguracja serwerów, usług, itp.
Robert007
Beginner
Posty: 169
Rejestracja: 19 stycznia 2010, 07:39

Jak uruchomić skrypt, moŻe popełniam błąd?

Post autor: Robert007 »

Skrypt:

Kod: Zaznacz cały

#!/bin/sh
 
PROCESS_COUNT=$(ps -fu root | grep aplikacja | grep -v grep | wc -l)
case $PROCESS_COUNT in
0) /home/s/aplikacja &
;;
1) #OK, program is already running once
;;
*) #OK, program is already multiple times
;;
esac
Wpisywane jako root:

Kod: Zaznacz cały

*/1 * * * * /home/s/check.sh >/dev/null 2>&1
No ale nic się nie dzieje a prawa są 0777.

Jak uruchomić skrypt?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

A odpalony z palca działa? Zawsze możesz sobie przekierować wyjście do pliku zamiast do /dev/null i zobaczyć czy czegoś nie pisze.

Tak na marginesie:
Robert007 pisze:prawa są 0777
Chmod 777 w 99,9% przypadków nie jest rozwiązaniem.

I po co to?
Robert007 pisze:*/1
Sama '*' działa identycznie.
Robert007
Beginner
Posty: 169
Rejestracja: 19 stycznia 2010, 07:39

Post autor: Robert007 »

Z tym 1 to przynajmniej tu piszę: http://wiki.sa-mp.com/wiki/Linux_Server
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Re: Jak uruchomić skrypt, moŻe popełniam błąd?

Post autor: mariaczi »

Robert007 pisze: Wpisywane jako root:

Kod: Zaznacz cały

*/1 * * * * /home/s/check.sh >/dev/null 2>&1
...
Jak uruchomić skrypt?
Do którego crontab'a to wpisywałeś? Może brakuje jednego parametru - użytkownika, na którym to ma zostać uruchomione jeśli wpisu dokonałeś w /etc/crontab.
Robert007
Beginner
Posty: 169
Rejestracja: 19 stycznia 2010, 07:39

Post autor: Robert007 »

Do jakiego pliku dokładnie to muszę wpisać?
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Napisz: co, jak (jakie komendy) wykonywałeś aby wpisać to do crontab'a. Rozjaśni to sytuację, czy składnię masz poprawną.
Robert007
Beginner
Posty: 169
Rejestracja: 19 stycznia 2010, 07:39

Post autor: Robert007 »

Właśnie nie wiem jak mam to dodać.

Pytanie po za w/w skryptem, mam też skrypt taki:

Kod: Zaznacz cały

#!/bin/sh
log=samp.log
dat=`date`
samp="/home/samp03/samp03"
cd /home/samp03
 
echo "${dat} watchdog script starting." >>${log}
while true; do
        echo "${dat} Server exited, restarting..." >>${log}
        #mv /g.txt /home/sampver_log.`date '+%m%d%y%H%M%S'`
        ${samp} >> $log
	sleep 2
done

Działa mi poprawnie i uruchamia ponownie serwer jak się wyłączy. Ale pytanie brzmi: czy to nie za często sprawdza, czy serwer jest włączony i nie obciąża za bardzo systemu?
RaV.
Posty: 87
Rejestracja: 28 czerwca 2006, 15:30
Lokalizacja: 127.0.0.1

Post autor: RaV. »

Jeśli chcesz uruchamiać z konta roota, po wydaniu jako root polecenia crontab -e, w edytorze będziesz mógł edytować tablicę Crona. Jeśli chciałbyś uruchamiać skrypt z "tablicy systemowej", to masz takie katalogi, jak /etc/cron.*. W nich znajdują się skrypty, które są uruchamiane co godzinę, codziennie, co tydzień i raz w miesiącu. Wyjątkiem jest katalog /etc/crontab.d, który zawiera pliki z tablicami Crona. W formacie prawie takim samym, jak format tablicy użytkownika. Różnica polega na tym, że pojawia się dodatkowe pole pomiędzy "kiedy" a "co" uruchomić, które jest loginem użytkownika, z jakiego prawami ma zostać uruchomione polecenie.

Przyjrzyjmy się przykładowi. Użytkownik "rav" chciałby od poniedziałku do piątku, ale tylko w pierwszej połowie miesiąca, o 19:38 wykonać skrypt /usr/bin/somescript.sh. Może na swoim koncie wydać polecenie crontab -e, a następnie w swoim ulubionym edytorze (którym jest vim, bo taką sobie ustalił zmienną EDITOR), zapisze następującą linijkę:

Kod: Zaznacz cały

38 19 1-15 * 1-5        /usr/bin/somescript.sh
Jeśli ma zaprzyjaźnionego admina, na przykład siebie, to może wyedytować plik /etc/cron.d/somescript i tam dopisać:

Kod: Zaznacz cały

38 19 1-15 * 1-5     rav    /usr/bin/somescript.sh
Efekt będzie ten sam. Różnica polega na tym, że normalnie nie będzie mógł edytować pliku /etc/cron.d/somescript i w pierwszym przypadku crontab sprawdzi składnię pliku. Jeśli by się pomylił i wpisał:

Kod: Zaznacz cały

19 38 1-15 * 1-5        /usr/bin/somescript.sh
crontab nakrzyczy na niego, że nie może wystąpić godzina 38:19! W przypadku tablicy systemowej, nie wiem, czy jest możliwość sprawdzenia składni.

Co do Twojego problemu, to proponowałbym dla testów usunąć ">/dev/null 2>&1" i zobaczyć, co pojawia się na wyjściu. Lub też zamieniłbym /dev/null na jakiś plik, jak padła już sugestia. Bez przekierowania potoków, wszystko co trafiłoby na STDOUT i STDERR zostanie skierowane na maila użytkownika, który uruchamia wpis Crona. Dodatkowo, zajrzałbym do /var/log/syslog (lub też do pliku, gdzie Cron wyrzuca logi) i zobaczył, co Cron wypisuje.
Robert007
Beginner
Posty: 169
Rejestracja: 19 stycznia 2010, 07:39

Post autor: Robert007 »

RaV. pisze:proponowałbym dla testów usunąć ">/dev/null 2>&1" i zobaczyć, co pojawia się na wyjściu.
Wyświetliło:

Kod: Zaznacz cały

-bash: */1: No such file or directory
Dziwne że wyświetliło informację o brak pliku jak adres był poprawny.
Natomiast ja potrzebuję co 1 minutę to musi być w ten sposób?

Kod: Zaznacz cały

*/1 * * * *
RaV.
Posty: 87
Rejestracja: 28 czerwca 2006, 15:30
Lokalizacja: 127.0.0.1

Post autor: RaV. »

Jak pisał lessmian2 wyżej, wystarczy:

Kod: Zaznacz cały

* *   * * *     /full/path/to/script
Nie spotkałem się z zapisem "*/1". Znaczyłoby to "co każde"? O wiele prościej "*" - "Każdej/każdego". Tym bardziej, że używasz tego "potworka" tylko dla minut. Konsekwentnie powinieneś był użyć w każdym polu:

Kod: Zaznacz cały

*/1 */1    */1 */1 */1       /full/path/to/script
Co jestem pewien, że również jest błędnym zapisem. A już na pewno głupio wygląda ;) .

Zamień "*/1" na "*".
ODPOWIEDZ