कैसे एक प्रक्रिया को मारना है जो कभी नहीं मरता है?


26

संकट

मेरे पास जावा प्रक्रिया है जो न तो SIGTERM और न ही SIGKILL के साथ मरती है।

logstash  2591     1 99 13:22 ?        00:01:46 /usr/bin/java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+DisableExplicitGC -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -Xmx1g -Xms256m -Xss2048k -Djffi.boot.library.path=/usr/share/logstash/vendor/jruby/lib/jni -Xbootclasspath/a:/usr/share/logstash/vendor/jruby/lib/jruby.jar -classpath : -Djruby.home=/usr/share/logstash/vendor/jruby -Djruby.lib=/usr/share/logstash/vendor/jruby/lib -Djruby.script=jruby -Djruby.shell=/bin/sh org.jruby.Main --1.9 /usr/share/logstash/lib/bootstrap/environment.rb logstash/runner.rb --path.settings /etc/logstash

यह हर संकेत प्राप्त होता है respawns।

Sep 15 13:22:17 test init: logstash main process (2546) killed by KILL signal
Sep 15 13:22:17 test init: logstash main process ended, respawning

यह अजीब लगता है, लेकिन यहां तक ​​कि मैं सर्वर को रिबूट करता हूं, यह अभी भी नहीं मरता है

प्रक्रिया को कमांड से नीचे init स्क्रिप्ट के माध्यम से निष्पादित किया गया था:

NAME=logstash
LS_USER=logstash
LS_OPTS="--path.settings=/etc/logstash"
LS_PIDFILE=/var/run/$NAME/$NAME.pid
LS_STDERR="/var/log/logstash/logstash.stderr"
DAEMON="/usr/share/logstash/bin/logstash"

runuser -s /bin/sh -c "exec $DAEMON ${LS_OPTS}" ${LS_USER} &>${LS_STDERR} &

क्या इस प्रक्रिया को ओएस को फिर से स्थापित करने के अलावा मारने के लिए मजबूर करने का कोई तरीका है?

वातावरण

प्रक्रिया:

logstash 5.0.0~alpha5

OS:

Red Hat Enterprise Linux Server release 6.7 (Santiago)

जावा संस्करण:

openjdk version "1.8.0_101"
OpenJDK Runtime Environment (build 1.8.0_101-b13)
OpenJDK 64-Bit Server VM (build 25.101-b13, mixed mode)

सर्वर Microsoft Azure पर तैनात है।


मारने से पहले वें eprocess के लिए आवश्यक फ़ाइलों में से एक का नाम बदलना इसे सफलतापूर्वक पुनरारंभ करने से रोकना चाहिए।
हेगन वॉन एइटजेन

6
आप इसे सिर के लिए मिला है! यह प्रक्रिया स्पष्ट रूप से एक हाइलैंडर है।
beppe9000

4
@ beppe9000 और जब हम उस मनोदशा में होते हैं, हम अपने माता-पिता को भी निष्पादित कर सकते हैं।
दिमित्री ग्रिगोरीव

2
जैसे ही मैंने शीर्षक देखा था, मुझे पता था कि यह Logstash होगा
मार्क हेंडरसन

1
सिर में एक एडामेंटियम गोली के साथ इसे गोली मारो।
no --zɐɹƆ

जवाबों:


77

init: logstash मुख्य प्रक्रिया (2546) जिसे KILL सिग्नल द्वारा मार दिया गया

दरअसल आपकी प्रक्रिया यहीं रुक जाती है।

init: logstash मुख्य प्रक्रिया समाप्त हो गई, श्वसन

इसे बदलने के लिए init द्वारा एक नई logstash प्रक्रिया शुरू की जाती है।


यही कारण है कि यह भी पता चलता है जो नियंत्रण प्रक्रिया logstash को पुन: प्रारंभ के लिए जिम्मेदार है: init । (आरएचईएल 6 और सेंटो पर जो अपस्टार्ट है) आपकी प्रक्रिया सबसे अधिक संभावना /etc/inittabया तो एक ड्रॉप-इन फ़ाइल /etc/init/logstash.conf(या समान) से शुरू होती है और इसे एप्रॉपिएट टूल के साथ नियंत्रित किया जाना चाहिए, initctlऔर इसके साथ नहीं kill

initctl listलॉगस्टैश है या नहीं यह देखने का प्रयास करें ।

फिर initctl stop logstashरोक देंगे।

/ Etc / init में फ़ाइल को संपादित करना या निकालना आपको इसे लगातार अक्षम करने की अनुमति देगा।

तुम भी serviceऔर chkconfigआदेशों के साथ काम को नियंत्रित करने में सक्षम हो सकता है ।


4
नौकरी के लिए सही उपकरण का उपयोग करने के लिए +1।
मस्त

0

यह शायद इसलिए है क्योंकि लॉगस्टैश-रिले चल रहा है ... आपको लॉगस्टैश-रिले को रोकने की कोशिश करनी चाहिए

इस जाँच के बाद यदि ps है तो initctl सूची | तरह

उम्मीद है इससे आपको मदद मिलेगी! इसने मेरे लिए समस्या तय कर दी!

धन्यवाद

वी.आर.


प्रश्न में जानकारी स्पष्ट रूप से इंगित करती है कि यह वह था initजो प्रक्रिया का सम्मान करने के लिए जिम्मेदार था।
कैस्परल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.