Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam Was, mam sobie skrypt do włączania aplikacji automatycznie gdy się wyłączy - działa.
Jednak jeżeli jest błąd z konfiguracji tej aplikacji to skrypt cały czas próbuje ją uruchomić co objawia się 100% użyciem procesora.
Jak zlimitować czas wykonywania skryptów w bashu?
Pozdrawiam!
Offline
uśpij skrypt za pomocą sleep
PS. a temat czemu nie w programowaniu?
Offline
A powiedz mi jak odpalić dany skrypt przez sleepa?
Co do działu to ja nie widzę działu programowanie ;)
/Edit - a jest - nie zauważyłem, wybacz ;)
Offline
A powiedz mi jak odpalić dany skrypt przez sleepa?
nie tak
w skrypcie musisz użyć sleepa, np.
#!/bin/bash jeden # skrypt wykonuje pierwszą komendę sleep 10 # "zasypia" na dziesięć sekund... dwa # ...i potem jedzie dalej
Offline
Ale takie rozwiązanie dużo mi nie da ;)
Offline
moznaby wykozystac plik z licznikiem prob
1. zanim probojesz odpalic ponownie sprawdzasz czy istnieje i czas jego modyfikacji
2a) jezeli nie istnieje lub starszy niz 1 minuta tworzysz nowy z wartoscia licznika 0
2b) w przeciwnym razie o zwiekszasz wartosc o 1
3) sprawdzasz czy obecna wartosc licznika prob nie przekroczyla zadanego limitu
4) jezeli tak konczysz skrypt
Offline
Witam, poczytałem trochę o sleepie i po części da się to zrobić tą komendą ;)
Próbowałem napisać skrypt który sprawdza czy istnieje już uruchomiony taki proces ( jeżeli tak to wyświetla że nie można go zduplikować a jeżeli nie to go uruchamia )
#!/bin/bash
script=`ps ax | grep motion | grep -v staszek | wc -l`
if [ $staszek = 0 ]
then
sleep 3s;/home/staszek/binarka
else
echo "Blokada - Nie można zduplikować procesu"
fi
Co tu jest nie tak ( dlaczego raz działa a raz nie? )
P.S
if [ $script = 0 ] <<< Za co odpowiada to ta liczba? W tym wypadku 0?
Pozdrawiam!
Offline
if [ $script = 0 ] <<< Za co odpowiada to ta liczba? W tym wypadku
w $script masz ilosc linijek po przegrepowaniu ps i jezeli jest zero to wynik grepa byl pusty ... IMHO ladniej sprawdzac kod powrotu grepa (zmienna $?) niz ilosc linijek
co do skryptu to jezeli proba maja byc powtarzane bez wzgledu na ich ilosc tylko nie musza byc powtarzane natychmiast to wystarczy
while true; do komenda do uruchomiwnia sleep 3s done
prostrze od tych kombinacji z ps ...
Offline
Witam ;)
Zrobiłem! Na razie działa będę to jeszcze testował jutro ale wydaje się być w porządku.
Teraz ostatnia rzecz ale najtrudniejsza.
Mam sobie sleep'a w tym skrypcie :) odpalam go za pomocą ./startserver.sh start
Wszystko jest w porządku do czasu gdy sleep jest ustawiony na 3s - wtedy serwer zawsze* uruchamia się 3sec. Jednak - chciał bym by skrypt sprawdzał czy serwer działa i ewentualnie włączał go np co 15minut! Jak to zrobić żeby serwer poprzez komendę ./startserver.sh włączał się odrazu a po crashu po 15minutach?
Dodam że te skrypty muszą być z sobą połączone i skryptem "zapłonowym" ( kontrolnym ) będzie server.sh i przez niego będzie włączany/wyłączany/resetowany ten serwer.
* - niezależnie od tego czy jest uruchomiony przez ./startserver.sh czy automatycznie przez skrypt po scrashowaniu.
Pozdrawiam!
P.S no i oczywiście załączam mój aktualny server.sh - zapomniałem :P
#!/bin/bash
server_start() {
/home/script/startserver.sh & # Pełna scieszka do skryptu odpalającego
}
server_stop() {
killall startgtaserver.sh # Nazwa skryptu odpalajacego serwa
killall script # Nazwa pliku wykonywalnego serwa
}
server_restart() {
server_stop
sleep 3
server_start
}
case "$1" in
'start')
server_start
;;
'stop')
server_stop
;;
'restart')
server_restart
;;
*)
echo "Użycie $0 start|stop|restart"
esac
Offline
Jak to zrobić żeby serwer poprzez komendę ./startserver.sh włączał się odrazu a po crashu po 15minutach?
w skrypcie "zaplonowym" wstawiasz w petli while najpierw odpalenie serwera (wazne zeby nie przechodzil w tlo) a potem dajesz sleep na 15 min ... skrypt odpalasz w tle co powoduje ze hodzi on non stop a gdy komenda odpalajaca serwer zakonczy to czeka 15 min i wykonuje ja ponownie ... czyli
while true; do /home/script/script sleep 15m done
Kod:
#!/bin/bash if pgrep script &>/dev/null; then echo Blad - Duplikacja procesu! else sleep 3s;/home/script/script fi
takim zabezpieczeniem lepiej objac caly skrypt "zaplonowy" lub zrobic to tak:
while true; do if pgrep script &>/dev/null; then echo Blad - Duplikacja procesu! return -1 else /home/script/script fi sleep 15m done
bo inaczej moze dojsc do odpalenia dwuch serwerow (np. w czasie oczekiwania ) lub mozna namnozyc procesow zwiazanych z skryptem zaplonowym ktory chodzi w niekonczonej petli
PS1 kod lepiej umieszczac w znacznikach [ code ] a nie [ quote ] - zachowuje wciecia
PS2 "sleep 3; komenda" to dwie instrukcje wykonywane kolejno - "poczekaj 3 sek, odpal komenda" a nie jedna -"odpal komenda po 3 sekundach"
Offline
Dobrze, dziś pokombinuje.
Ja dopiero zaczynam pracę z bashem więc jeszcze dużo nie rozumiem.
Pozdrawiam!
// Edycja - wielkie dzięki (problem został rozwiązany - skrypt śmiga aż miło a ja się czegoś nauczyłem :) )
Pozostaje mi dostosowanie do httpd ale z tym sobie już poradzę :)
Offline