Jak zatrzymać serwer demona w Rails?
Uruchamiam moją aplikację rails używając następującego
$script/server -d webrick
W moim systemie Ubuntu, powyższe polecenie Uruchom serwer webrick w tle . Mogę zabić proces używając polecenia kill
$kill pid
Czy rails dostarcza jakieś polecenie, aby zatrzymać działający w tle daemon server ?
Jak ten dostarczony przez rails do uruchomienia serwera, dzięki .
EDIT Kiedy należy uruchomić serwer daemon ? Każdy scenariusz w czasie rzeczywistym pomoże dzięki
15 answers
A może grabie?
desc 'stop rails'
task :stop do
pid_file = 'tmp/pids/server.pid'
pid = File.read(pid_file).to_i
Process.kill 9, pid
File.delete pid_file
end
Uruchom z rake stop lub sudo rake stop
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-25 02:06:32
Jeśli to może być przydatne, w Linuksie możesz znaleźć, który proces używa portu (w tym przypadku 3000), którego możesz użyć:
Lsof-i: 3000
Zwróci też pid
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-24 12:47:34
Jak powiedział Ryan:
PID, którego chcesz jest w tmp / pids /
Prawdopodobnie serwer.pid to plik, który chcesz.
Powinieneś być w stanie uruchomić kill -9 $(cat tmp/pids/server.pid)
, aby obniżyć demonizowany serwer.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-02 22:32:37
Identyfikator procesu serwera demona jest przechowywany w katalogu aplikacji tmp / pids/. Możesz użyć swojego standardowego kill process_id
z informacjami, które tam znajdziesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-14 23:35:51
Jedynym właściwym sposobem na zabicie domyślnego serwera Ruby on Rails (jakim jest WEBrick) jest:
kill -INT $(cat tmp/pids/server.pid)
Jeśli biegasz Kundel, to wystarczy:
kill $(cat tmp/pids/server.pid)
Użyj kill -9
Jeśli twój Demon zawiesił się. Pamiętaj o konsekwencjach kill -9
- Jeśli dane przechowywane w pamięci podręcznej Active Record nie zostaną spłukane na dysk, utracisz dane. (Tak jak ostatnio)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-04 17:28:53
W Terminalu, aby dowiedzieć się o ID procesu (PID):
$ lsof -wni tcp:3000
Następnie użyj liczby w kolumnie PID, aby zabić proces:
$ kill -9 <PID>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-31 06:01:43
Pguardiario wyprzedził mnie, choć jego implementacja jest nieco niebezpieczna, ponieważ używa SIGKILL
zamiast (zalecanego) SIGINT
. Oto zadanie rake, które zazwyczaj importuję do moich projektów programistycznych:
Lib / tasks / stopserver.grabie
desc 'stop server'
task :stopserver do
pid_file = 'tmp/pids/server.pid'
if File.file?(pid_file)
print "Shutting down WEBrick\n"
pid = File.read(pid_file).to_i
Process.kill "INT", pid
end
File.file?(pid_file) && File.delete(pid_file)
end
Powoduje przerwanie serwera wtedy i tylko wtedy, gdy plik PID istnieje. Nie wyrzuca brzydkich błędów, jeśli serwer nie działa, i powiadamia Cię, Jeśli faktycznie wyłącza serwer.
Jeśli zauważ, że serwer nie chce się wyłączać przy użyciu tego zadania, dodaj następującą linię po linii Process.kill "INT"
i spróbuj uaktualnić do jądra, które ma ten błąd naprawiony.
Process.kill "CONT", pid
(końcówka kapelusza: jackr)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:23
Uruchom to polecenie:
locate tmp/pids/server.pid
Wyjście: Pełna ścieżka do tego pliku. Sprawdź nazwę katalogu projektu, aby znaleźć dany plik, jeśli na liście znajduje się wiele plików.
Następnie uruchom polecenie:
rm -rf [complete path of tmp/pids/server.pid file]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-25 14:05:27
Bilet rubinowy, http://bugs.ruby-lang.org/issues/4777 , sugeruje, że to błąd jądra (Linuksa). Dają one obejście (zasadniczo odpowiednik Ctrl-C/Ctrl-Z), do użycia, jeśli zdemonizowałeś Serwer:
- kill-INT
cat tmp/pids/server.pid
- kill-CONT
cat tmp/pids/server.pid
Wydaje się, że powoduje to przetworzenie oryginalnego sygnału INT, możliwe, że pozwala na spłukiwanie danych i tak dalej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-12 02:26:07
Tutaj zostawiam funkcję Basha, która po wklejeniu do ciebie .bashrc
lub .zshrc
zrobi coś takiego:
rails start # To start the server in development environment
rails start production # To start the server in production environment
rails stop # To stop the server
rails stop -9 # To stop the server sending -9 kill signal
rails restart # To restart the server in development environment
rails restart production # To restart the server in production environment
rails whatever # Will send the call to original rails command
Oto Funkcja:
function rails() {
if [ "$1" = "start" ]; then
if [ "$2" = "" ]; then
RENV="development"
else
RENV="$2"
fi
rails server -d -e "$RENV"
return 0
elif [ "$1" = "stop" ]; then
if [ -f tmp/pids/server.pid ]; then
kill $2 $(cat tmp/pids/server.pid)
return 0
else
echo "It seems there is no server running or you are not in a rails project root directory"
return 1
fi
elif [ "$1" = "restart" ]; then
rails stop && rails start $2
else
command rails $@
fi;
}
Więcej informacji w wpisie na blogu pisałem o tym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 08:38:30
Nie wydaje mi się, że jeśli użyjesz -d. po prostu zabiłbym proces.
W przyszłości po prostu otwórz inne okno terminala i użyj polecenia bez -d, które dostarcza naprawdę użytecznych wyników debugowania.
Jeśli jest to produkcja, użyj czegoś takiego jak passenger lub thin, aby mogli łatwo zatrzymać procesy lub ponownie uruchomić serwery
one-liner: kill -INT `ps -e | grep ruby | awk '{print $1}'`
ps -e
Lista wszystkich procesów w systemie
grep ruby
wyszukuje wyjście dla procesu ruby
awk
przekazuje pierwszy argument tego wyjścia
(PID) do kill -INT
.
spróbuj z echo zamiast kill, jeśli chcesz tylko zobaczyć PID.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-06 02:09:54
If kill pid not work then Usuń serwer plików.pid W MyRailsApp/tmp/pids /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-21 05:03:35
Przyszedłem tu, bo próbowałem (bezskutecznie) powstrzymać się od normalnego zabijania i myślałem, że zrobię coś złego.
Kill -9 to jedyny pewny sposób na zatrzymanie serwera ruby on rails? Co!? Wiesz, jakie są tego konsekwencje? To może być katastrofa...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 15:40:49
Możesz uruchomić serwer w tle dodając -d
do polecenia. Na przykład:
puma -d
Aby go zatrzymać, po prostu zabij jakikolwiek proces uruchomiony na porcie 3000:
kill $(cat tmp/pids/server.pid)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-23 15:44:10