2012-08-27 8 views
24

क्या किसी को पता है कि साइडकीक की पिडफाइल को इसे बंद करने के लिए कैसे बंद करें? ps ax | grep sidekiq चल रहा है और फिर sidekiqctl stop <pid from grep> चल रहा है लगातार no such pidfile त्रुटि देता है? सीएनटीएल-सी और सीएनटीएल-डी का कोई प्रभाव नहीं पड़ता है।साइडकीक प्रक्रियाओं को गहराई से बंद करना

प्रक्रिया विंडो बंद करना और एक नई विंडो को फिर से खोलना प्रक्रिया को मारता नहीं है क्योंकि यह एक डिमन के रूप में चल रहा है।

मुझे मिला एकमात्र लगातार सुधार रिबूटिंग है।

+0

मार 'PROCESS_ID' ठीक काम किया, इस प्रक्रिया को मारने के लिए। फिर साइडकीक को पुनरारंभ करना फिर भी लालसा नहीं मिल रहा है। – user1627827

+0

इसके अलावा, 'kill -term pid' इसे अगले 10 सेकंड में शानदार रूप से बंद कर देगा। –

उत्तर

16

बस इस एक में अपने आप को तलाश कर दिया गया ...

Sidekiq के नए संस्करण की तरह लगता है इस में निर्माण किया है:

https://github.com/mperham/sidekiq/wiki/Signals

मार -USR1 [PROCESS_ID]

मेरे लिए बहुत अच्छा काम किया। श्रमिकों ने नई नौकरियों को चुनना बंद कर दिया, लेकिन उन लोगों को समाप्त कर दिया जिन पर वे थे, फिर आखिर में प्रक्रिया पूरी होने पर मैंने प्रक्रिया को मार दिया।

मार अवधि [PROCESS_ID]

1

sidekiq नजर रखने के लिए भगवान का उपयोग करें।

फिर तुम सब करने की जरूरत है बंडल कार्यकारी भगवान रोक

वैकल्पिक रूप से है, तो आप उपयोग कर सकते हैं: रोक sidekiqctl जिन्हें आप नीचे 60

+0

'sidekiqctl रोक' पीआईडी ​​(प्रक्रिया आईडी) पर निर्भर करता है –

30

Sidekiq शुरू समय में एक pidfile निर्दिष्ट करने की क्षमता प्रदान करता है या, प्रक्रिया शुरू होने के बाद पिडफाइल बनाने के लिए। किसी भी मामले में आप स्टॉप टाइम पर पिडफाइल का उपयोग कर सकते हैं।

  1. उपयोग ps -ef | grep sidekiq पीआईडी ​​
  2. एक फ़ाइल बनाएँ खोजने के लिए (जैसे, sidekiq.pid) केवल सामग्री पीआईडी ​​होने के साथ आप सिर्फ
  3. sidekiqctl stop <pidfile_name>
  4. उपयोग -P <pidfile_name> या --pidfile <pidfile_name> जब भविष्य में sidekiq शुरू कर पाया
58

साइडकीक को मजबूती से मारने के लिए इसका उपयोग करें।

ps -ef | grep sidekiq | grep -v grep | awk '{print $2}' | xargs kill -9 
+0

एक का उपयोग करता है 'ps -ef | grep sidekiq | grep -v grep | अजीब '{प्रिंट $ 2}' | xargs kill -TERM' sidekiq श्रमिकों को रोकने के लिए समय देगा। 'Sidekiqctl stop' कमांड [एक अमूर्त] है (https://github.com/mperham/sidekiq/blob/master/bin/sidekiqctl#L70) – Francisco

2

आप bashes के पसंद करते हैं ...

लिपियों/stop_sidekiq.sh

#!/bin/bash 
DIR="$(cd "$(dirname "$0")" && pwd)" 

PROJECT_DIR=$DIR/../ # EDIT HERE: rel path to your project form this file location (my scripts are in ./scripts/) 
SIDEKIQ_PID_FILE=$PROJECT_DIR/tmp/pids/sidekiq.pid # EDIT HERE: pid file location 

if [ ! -f $SIDEKIQ_PID_FILE ]; then 
    # if no pid file, retrieve pid and create file 
    ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}' > $SIDEKIQ_PID_FILE 
fi 

(cd $PROJECT_DIR && bundle exec sidekiqctl stop $SIDEKIQ_PID_FILE) 

नोट्स:

  • काम करेंगे भले ही sidekiq पीआईडी ​​फ़ाइल तर्क के बिना शुरू कर दिया
  • यह मानता है स्क्रिप्ट परियोजना के अंदर एक फ़ोल्डर में है और पीआईडी ​​फाइलों को संग्रहीत किया जाता है।/ tmp/pids/
4

मैंने एक छोटा सा हैंडलर लिखा है जो साइडकीक को शुरू या बंद कर सकता है।

start_stop_sidekiq.sh

#!/bin/bash 
cmd=$1 
PROJECT_DIR=$2 
PIDFILE=$PROJECT_DIR/tmp/pids/sidekiq.pid 
cd $PROJECT_DIR 

start_function(){ 
    LOGFILE=$PROJECT_DIR/log/sidekiq.log 
    echo "Starting sidekiq..." 
    bundle exec sidekiq -d -L $LOGFILE -P $PIDFILE -q mailer,5 -q default -e production 
} 

stop_function(){ 
    if [ ! -f $PIDFILE ]; then 
    ps -ef | grep sidekiq | grep busy | grep -v grep | awk '{print $2}' > $PIDFILE 
    fi 
    bundle exec sidekiqctl stop $PIDFILE 
} 

case "$cmd" in 
    start) 
    start_function 
    ;; 
    stop) 
    stop_function 
    ;; 
    restart) 
    stop_function && start_function; 
    ;; 
    *) 
    echo $"Usage: $0 {start|stop|restart} /path/to/rails/app" 
esac 

यह सहेजें, प्रकार chmod +x start_stop_sidekiq.sh। तो बस के साथ इसे चलाने:

bash start_stop_sidekiq.sh start /path/to/your/rails/app

या

bash start_stop_sidekiq.sh stop /path/to/your/rails/app

आप केवल एक रेल एप्लिकेशन है, तो आप भी $ PROJECT_DIR चर स्थिर सेट कर सकते हैं, ताकि आप की जरूरत नहीं है प्रत्येक बार पथ निर्दिष्ट करने के लिए। उम्मीद है की यह मदद करेगा!

0

साइडकीक चल रहा है या नहीं, यह जांचने वाली एक बैश स्क्रिप्ट साझा करना, इसे किसी भी नई नौकरियों को नहीं लेने के लिए कहने के लिए टीएसटीपी भेजता है, तब तक इंतजार करता है जब तक कि कोई भी चलती नौकरियां समाप्त नहीं हो जातीं और फिर प्रक्रिया को टीईआरएम सिग्नल भेजकर रोक जाती है।

https://gist.github.com/kamilbednarz/5ea6398af2a7537aa8feb5a63f3acf2f

संबंधित मुद्दे