लिनक्स में SSH क्लाइंट को बंद करने के बाद पृष्ठभूमि प्रक्रिया को रोकने से कैसे रोकें


291

मैं एसएसएच (पुट्टी) के माध्यम से एक लिनक्स मशीन पर काम कर रहा हूं। मुझे रात के दौरान चलने वाली एक प्रक्रिया को छोड़ने की जरूरत है, इसलिए मैंने सोचा कि मैं पृष्ठभूमि में इस प्रक्रिया को शुरू करके (कमांड के अंत में एक एम्परसेंड के साथ) कर सकता हूं और एक फाइल पर stdout रीडायरेक्ट कर सकता हूं।

मेरे आश्चर्य के लिए, यह काम नहीं करता है। जैसे ही मैंने पुट्टी की खिड़की बंद की, प्रक्रिया बंद कर दी गई।

मैं ऐसा होने से कैसे रोक सकता हूँ ??

जवाबों:


301

" Nohup " प्रोग्राम देखें।


4
आप इसे बाद में कैसे रोकेंगे?
डेरेक दाहर

9
लॉग इन करें और "मार <pid>" करें। यदि आप पिड को नहीं जानते हैं तो "पिडोफ" का प्रयोग करें।
जेस्पर

32
आप उपयोग कर सकते हैं nohup command > /dev/null 2>&1 &किसी भी stdout या stderr उत्पादन (कोई बनाए बिना पृष्ठभूमि में चलाने के लिए nohup.outफ़ाइल)
KCD

क्या होगा अगर मुझे कुछ इनपुट प्रदान करने की आवश्यकता है? उदाहरण के लिए, मेरे पास एक लंबी चलने वाली स्क्रिप्ट है जिसे मुझे पृष्ठभूमि में चलाने की आवश्यकता है लेकिन यह पहले मेरे एफ़टीपी पासवर्ड के लिए पूछता है। nohupइस मामले में मदद नहीं करता है। वहाँ Ctrl+Z/ के साथ बेला करने के लिए एक रास्ता है bg?
सर्गेई

1
चूँकि मैं वर्णों के गूढ़ दृश्यों को याद करने में आलसी और बुरा हूँ, इसलिए मैंने यह लिखा , जो @KCD ने कहा था, उसके आधार पर लिखा था , और इसका भरपूर उपयोग किया है।
विसंगति

167

मैं GNU स्क्रीन का उपयोग करने की सलाह दूंगा । यह आपको सर्वर से डिस्कनेक्ट करने की अनुमति देता है जबकि आपकी सभी प्रक्रियाएं चलती रहती हैं। मुझे नहीं पता कि इससे पहले कि मैं जानता था कि मैं इसके बिना कैसे रहता था।


7
यह मेरे द्वारा उपयोग किए गए सॉफ़्टवेयर के सबसे महान टुकड़ों में से एक है। गंभीरता से। मेरे पास यह एक BSD बॉक्स पर चल रहा है जिसे मैं EVERYWHERE से ssh करता हूं, और बस अपनी स्क्रीन पर पुनः संलग्न कर सकता हूं और मेरे सभी टर्मिनल हैं जहां मैं हर तरह का सामान कर रहा हूं।
एडम जैस्कविज़ 20

1
मैं यह एक करने के लिए attest कर सकते हैं। स्क्रीन एक बेहतरीन एप्लिकेशन है। फिर से संलग्न करने की क्षमता अद्भुत है, और संभावित रूप से खोए हुए काम को बहुत बचाता है।
21

मैं इसे स्थानीय मशीनों पर भी उपयोग करता हूं, और एक ही स्क्रीन सेशन (स्क्रीन -x) में कई xterms संलग्न करता हूं। इस तरह मैं अपने स्क्रीन सत्र के भीतर कई विंडो खोल सकता हूं, और विंडो-टू-विंडो से अपने विभिन्न xterms को स्वतंत्र रूप से स्विच कर सकता हूं।
एडम जस्क्यूविज़

17
इस बात पर निर्भर करता है कि आपको पृष्ठभूमि वाले ऐप को फिर से कनेक्ट करने की आवश्यकता है या नहीं। यदि आप करते हैं, तो, हाँ, स्क्रीन उड़ान भरने का एकमात्र तरीका है। यदि यह आग है और भूल जाते हैं, हालांकि, nohup बिल के रूप में अच्छी तरह से फिट बैठता है, अगर बेहतर नहीं है।
डेव शेरोमैन

1
स्क्रीन के लिए +1। या, एक विकल्प के रूप में, tmux (मुझे स्क्रीन की तुलना में यह एक अधिक पसंद है) या यहां तक ​​कि बायोबू, जो स्क्रीन या tmux के लिए एक अच्छा दृश्य है। आप किसी भी समय उपयोग करने और बाद में लौटने के लिए एक शेल प्राप्त करने के लिए स्क्रीन टाइप कर सकते हैं, या स्क्रीन के साथ अपनी कमांड चला सकते हैं, जैसे "स्क्रीन कमांड": स्क्रीन सत्र तब तक मौजूद रहेगा जब तक कि प्रक्रिया "कमांड" मौजूद है, और यदि यह कुछ है बहुत लंबे समय तक, आप किसी भी समय इसके मानक आउटपुट को देख सकते हैं।
19

81

जब सत्र बंद हो जाता है तो प्रक्रिया SIGHUP संकेत प्राप्त करती है जिसे यह स्पष्ट रूप से नहीं पकड़ रहा है। nohupजब आप प्रक्रिया शुरू कर रहे हों या disown -hइसे बनाने से रोकने के लिए प्रक्रिया शुरू करने के बाद आप कमांड का उपयोग कर सकते हैं :

> help disown
disown: disown [-h] [-ar] [jobspec ...]
     By default, removes each JOBSPEC argument from the table of active jobs.
    If the -h option is given, the job is not removed from the table, but is
    marked so that SIGHUP is not sent to the job if the shell receives a
    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all
    jobs from the job table; the -r option means to remove only running jobs.

4
यहां लाभ यह है कि उन प्रक्रियाओं के लिए काम करता है जो पहले ही शुरू हो चुके हैं।
क्रिश्चियन के।

1
क्या 'जॉबस्पेक' का मतलब है पीड़?
स्टीवर्ट

1
कोई चिंता नहीं, यह जवाब यहां मिला है stackoverflow.com/questions/625409/…
स्टीवर्ट

42

daemonize? nohup? स्क्रीन? (tmux ftw, स्क्रीन कबाड़ है ;-)

बस वही करें जो शुरू से हर दूसरे ऐप ने किया है - डबल फोर्क।

# ((exec sleep 30)&)
# grep PPid /proc/`pgrep sleep`/status
PPid:   1
# jobs
# disown
bash: disown: current: no such job

बैंग! हो गया :-) मैंने यह अनगिनत बार सभी प्रकार के ऐप्स और कई पुरानी मशीनों पर उपयोग किया है। आप अपने और प्रक्रिया के बीच एक निजी चैनल खोलने के लिए रीडायरेक्ट और व्हाट्सएप के साथ गठबंधन कर सकते हैं।

Coproc.sh के रूप में बनाएँ:

#!/bin/bash

IFS=

run_in_coproc () {
    echo "coproc[$1] -> main"
    read -r; echo $REPLY
}

# dynamic-coprocess-generator. nice.
_coproc () {
    local i o e n=${1//[^A-Za-z0-9_]}; shift
    exec {i}<> <(:) {o}<> >(:) {e}<> >(:)
. /dev/stdin <<COPROC "${@}"
    (("\$@")&) <&$i >&$o 2>&$e
    $n=( $o $i $e )
COPROC
}

# pi-rads-of-awesome?
for x in {0..5}; do
    _coproc COPROC$x run_in_coproc $x
    declare -p COPROC$x
done

for x in COPROC{0..5}; do
. /dev/stdin <<RUN
    read -r -u \${$x[0]}; echo \$REPLY
    echo "$x <- main" >&\${$x[1]}
    read -r -u \${$x[0]}; echo \$REPLY
RUN
done

और फिर

# ./coproc.sh 
declare -a COPROC0='([0]="21" [1]="16" [2]="23")'
declare -a COPROC1='([0]="24" [1]="19" [2]="26")'
declare -a COPROC2='([0]="27" [1]="22" [2]="29")'
declare -a COPROC3='([0]="30" [1]="25" [2]="32")'
declare -a COPROC4='([0]="33" [1]="28" [2]="35")'
declare -a COPROC5='([0]="36" [1]="31" [2]="38")'
coproc[0] -> main
COPROC0 <- main
coproc[1] -> main
COPROC1 <- main
coproc[2] -> main
COPROC2 <- main
coproc[3] -> main
COPROC3 <- main
coproc[4] -> main
COPROC4 <- main
coproc[5] -> main
COPROC5 <- main

और वहाँ तुम जाओ, जो कुछ भी हो। <(:) प्रक्रिया के प्रतिस्थापन के माध्यम से एक अनाम पाइप खोलता है, जो मर जाता है, लेकिन पाइप चारों ओर चिपक जाता है क्योंकि आपके पास इसे संभालना है। मैं आमतौर पर sleep 1इसके बजाय :थोड़ा सा racy करता हूं, और मुझे "फ़ाइल व्यस्त" त्रुटि मिलेगी - ऐसा कभी नहीं होता है अगर एक वास्तविक कमांड चलाया जाता है (जैसे, command true)

"हेरेडोक सोर्सिंग":

. /dev/stdin <<EOF
[...]
EOF

यह मेरे द्वारा आजमाए गए हर एक शेल पर काम करता है, जिसमें बिजीबॉक्स / इत्यादि (initramfs) शामिल हैं। मैंने इसे पहले कभी नहीं देखा है, मैंने इसे स्वतंत्र रूप से खोजा, जबकि पता था कि कौन स्रोत स्रोत को स्वीकार कर सकता है? लेकिन यह अक्सर एक बहुत अधिक प्रबंधनीय रूप में विकसित होता है, अगर ऐसी कोई बात है।


2
क्यों नीचे वोट ... तो क्या हुआ अगर सवाल पुराना है; यह स्पष्ट रूप से प्रासंगिक है कि 11 अन्य जवाब हैं जो चूसना चाहते हैं। यह समाधान है, सिस्टम सिस्टेम, मुहावरेदार और पिछले 30 वर्षों के लिए स्वीकार करने का तरीका, व्यर्थ ऐप्स नहीं, जैसे। नोहुप एट अल।
एंथोनीसिंगर 20

7
कोई फर्क नहीं पड़ता कि आपका उत्तर कितना अच्छा है, कभी-कभी SO पर कोई व्यक्ति इसे पसंद नहीं करेगा और इसे डाउनवोट करेगा। यह बेहतर है कि इसके बारे में बहुत ज्यादा चिंता न करें।
एलेक्स डी

1
@ tbc0 ... कोशिशssh myhost "((exec sleep 500)&) >/dev/null"
anthonyrisinger

1
@anthonyrisinger ठीक है, कि काम करता है। मुझे लगता है कि यह क्लीनर है: ssh myhost 'sleep 500 >&- 2>&- <&- &' TMTOWTDI;)
tbc0

1
यह भी खूब रही। एकमात्र समाधान जो वास्तव में बिजीबॉक्स में काम करता है। यह अधिक उत्थान के योग्य है
Hamy

34
nohup blah &

ब्लाह के लिए अपनी प्रक्रिया का नाम दें!


2
आप रीडायरेक्ट मानक आउट और मानक त्रुटि जोड़ना चाह सकते हैं।
डेविड नेहमे

9
nohup रीडायरेक्ट और stderr से nohup.out (या nohup.out और nohup.err संस्करण पर निर्भर करता है) को पुनर्निर्देशित करता है, इसलिए जब तक आप कई कमांड नहीं चला रहे हैं यह आवश्यक नहीं है।
चास।

17

व्यक्तिगत रूप से, मुझे 'बैच' कमांड पसंद है।

$ batch
> mycommand -x arg1 -y arg2 -z arg3
> ^D

यह पृष्ठभूमि के लिए इसे भरता है, और फिर आपको परिणाम मेल करता है। यह क्रोन का एक हिस्सा है।


11

जैसा कि अन्य ने नोट किया है, पृष्ठभूमि में एक प्रक्रिया को चलाने के लिए ताकि आप अपने एसएसएच सत्र से डिस्कनेक्ट कर सकें, आपको पृष्ठभूमि प्रक्रिया को ठीक से अपने नियंत्रण टर्मिनल से अलग करना होगा - जो कि एसएसएचओ उपयोग करता है जो छद्म-ट्टी है।

आप स्टीवंस के "एडवांस्ड नेटवर्क प्रोग्राम, वॉल्यूम 1, 3 ईडीएन" या रोचाइंड्स के "एडवांस्ड यूनिक्स प्रोग्रामिंग" जैसी पुस्तकों में डोनेमिंग प्रक्रियाओं के बारे में जानकारी पा सकते हैं।

मुझे हाल ही में (पिछले कुछ वर्षों में) एक पुनर्गठित कार्यक्रम से निपटना पड़ा, जिसने खुद को सही ढंग से तैयार नहीं किया। मैंने एक सामान्य डीमॉनाइजिंग प्रोग्राम बनाकर इससे निपटने का काम किया - नोह के समान लेकिन उपलब्ध अधिक नियंत्रणों के साथ।

Usage: daemonize [-abchptxV][-d dir][-e err][-i in][-o out][-s sigs][-k fds][-m umask] -- command [args...]
  -V          print version and exit
  -a          output files in append mode (O_APPEND)
  -b          both output and error go to output file
  -c          create output files (O_CREAT)
  -d dir      change to given directory
  -e file     error file (standard error - /dev/null)
  -h          print help and exit
  -i file     input file (standard input - /dev/null)
  -k fd-list  keep file descriptors listed open
  -m umask    set umask (octal)
  -o file     output file (standard output - /dev/null)
  -s sig-list ignore signal numbers
  -t          truncate output files (O_TRUNC)
  -p          print daemon PID on original stdout
  -x          output files must be new (O_EXCL)

GNU getopt () फ़ंक्शन का उपयोग नहीं करने वाले सिस्टम पर डबल-डैश वैकल्पिक है; यह आवश्यक है (या आपको वातावरण में POSIXLY_CORRECT निर्दिष्ट करना होगा) लिनक्स आदि पर। चूंकि डबल-डैश हर जगह काम करता है, इसलिए इसका उपयोग करना सबसे अच्छा है।

आप अभी भी मुझसे संपर्क कर सकते हैं (अगर आप के लिए स्रोत चाहते हैं तो gmail डॉट कॉम पर Firstname dot lastname) daemonize

हालाँकि, कोड अब (अंत में) GitHub पर मेरे SOQ (स्टैक ओवरफ्लो प्रश्न) रिपॉजिटरी में संकुल उप-निर्देशिका daemonize-1.10.tgzमें फाइल के रूप में उपलब्ध है ।


13
आप स्रोत को गितब या बिटबकैट पर क्यों नहीं डालते?
रोब

5
जीथब से स्रोत की अनुपस्थिति में गिरावट क्यों आती है?
जोनाथन लेफ्लर

7
@JonathanLeffler IMHO एक प्रोग्राम के सभी शांत विकल्पों को सूचीबद्ध करता है जो पाठक के समय को बर्बाद करने पर किसी भी रूप में (व्यावसायिक रूप से भी नहीं) सीमाओं पर सार्वजनिक रूप से उपलब्ध नहीं है।
डिप्रैडडैनियल

7

डेबियन आधारित प्रणाली पर (रिमोट मशीन पर) स्थापित करें:

sudo apt-get install tmux

उपयोग:

tmux

आप चाहते हैं आदेश चलाएँ

सत्र का नाम बदलने के लिए:

Ctrl + B तब $

नाम भरें

सत्र से बाहर निकलने के लिए:

Ctrl + B तब D

(यह tmux सत्र छोड़ता है)। फिर, आप SSH से लॉग आउट कर सकते हैं।

जब आपको वापस आने / फिर से जांच करने की आवश्यकता होती है, तो SSH शुरू करें, और दर्ज करें

tmux session_name संलग्न करें

यह आपको अपने tmux सत्र में वापस ले जाएगा।


इस रास्ते से जाने के लिए रास्ता है
किलगोरट्राउट

6

अधिकांश प्रक्रियाओं के लिए आप इस पुराने लिनक्स कमांड-लाइन ट्रिक का उपयोग करके छद्म-विभेदन कर सकते हैं:

# ((mycommand &)&)

उदाहरण के लिए:

# ((sleep 30 &)&)
# exit

फिर एक नई टर्मिनल विंडो शुरू करें और:

# ps aux | grep sleep

वह दिखा देंगे sleep 30 अभी भी चल रहा है।

आपने जो किया है, वह एक बच्चे के बच्चे के रूप में प्रक्रिया शुरू की है, और जब आप बाहर निकलते हैं, तो nohup कमांड जो सामान्य रूप से बाहर निकलने के लिए प्रक्रिया को ट्रिगर करती है, ग्रैंड-बच्चे के लिए नीचे नहीं जाती है, इसे एक अनाथ प्रक्रिया के रूप में छोड़कर, अभी भी चल रहा है ।

मैं इस "यह सेट और इसे भूल जाओ" दृष्टिकोण, कोई से निपटने के लिए की जरूरत को पसंद करते हैं nohup, screen, tmux, आई / ओ पुनर्निर्देशन, या उस सामान के किसी भी।


5

यदि आप किसी प्रक्रिया को रूट के रूप में चलाने के लिए स्क्रीन का उपयोग करते हैं, तो विशेषाधिकार उन्नयन हमलों की संभावना से सावधान रहें। यदि आपका अपना खाता किसी तरह से समझौता हो जाता है, तो पूरे सर्वर को संभालने का एक सीधा तरीका होगा।

यदि इस प्रक्रिया को नियमित रूप से चलाने की आवश्यकता है और आपके पास सर्वर पर पर्याप्त पहुंच है, तो काम को चलाने के लिए क्रोन का उपयोग करना बेहतर विकल्प होगा। आप पृष्ठभूमि में अपनी प्रक्रिया शुरू करने के लिए init.d (सुपर डेमॉन) का भी उपयोग कर सकते हैं, और जैसे ही यह किया जाता है, इसे समाप्त कर सकते हैं।


5

nohupयदि आप अपने विवरण किसी फ़ाइल में लॉग इन करना चाहते हैं तो बहुत अच्छा है। लेकिन जब यह पृष्ठभूमि में जाता है तो आप इसे एक पासवर्ड देने में असमर्थ होते हैं यदि आपकी स्क्रिप्ट पूछती है। मुझे लगता है कि आपको कोशिश करनी चाहिए screen। इसकी एक उपयोगिता जिसे आप सेंट पर उदाहरण के लिए यम का उपयोग करके अपने लिनक्स वितरण पर स्थापित कर सकते हैं, yum install screenफिर अपने सर्वर को पोटीन या किसी अन्य सॉफ़्टवेयर के माध्यम से अपने शेल प्रकार में एक्सेस कर सकते हैं screen। यह पोटीन में स्क्रीन [0] खोलेगा। अपना काम करो। आप एक ही पोटीन सत्र में अधिक स्क्रीन [1], स्क्रीन [2] आदि बना सकते हैं।

मूल आज्ञाएँ जिन्हें आपको जानना आवश्यक है:

स्क्रीन शुरू करने के लिए

स्क्रीन


करने के लिए reate अगले स्क्रीन

Ctrl + A + स


आपके द्वारा बनाई गई n ext स्क्रीन पर जाने के लिए

Ctrl + A + n


डी etach करने के लिए

Ctrl + A + d


काम के दौरान अपनी पोटीन को बंद करें। और अगली बार जब आप पोटीन प्रकार के माध्यम से लॉगिन करते हैं

स्क्रीन -r

अपनी स्क्रीन पर फिर से कनेक्ट करने के लिए, और आप अपनी प्रक्रिया को अभी भी स्क्रीन पर देख सकते हैं। और स्क्रीन टाइप से बाहर निकलने के लिए #exit करें।

अधिक जानकारी के लिए देखते हैं man screen


यह मानते हुए कि yumयह सही उपकरण है, जब आप डिस्ट्रो को नहीं जानते हैं, अच्छा नहीं है। आपको यह स्पष्ट करना चाहिए कि किन डिस्ट्रोस के screenसाथ इंस्टॉल किया जा सकता है yum
टायमिक

5

यदि आप लॉगआउट करते हैं, तो एक माता-पिता प्रक्रिया को मार डाला जाता है, तो Nohup क्लाइंट प्रक्रिया को मारने की अनुमति नहीं देता है। और भी बेहतर अभी भी उपयोग करें:

nohup /bin/sh -c "echo \$\$ > $pidfile; exec $FOO_BIN $FOO_CONFIG  " > /dev/null

Nohup प्रक्रिया को आप समाप्ति के लिए प्रतिरक्षा शुरू करते हैं जो आपके SSH सत्र और इसकी बाल प्रक्रियाओं को आप लॉग आउट करने पर मारते हैं। मेरे द्वारा दी गई कमांड आपको एक तरीका प्रदान करती है जिससे आप एप्लिकेशन की पिड को एक पिड फ़ाइल में स्टोर कर सकते हैं ताकि आप इसे बाद में जान से मार सकें और प्रक्रिया को लॉग आउट करने के बाद चलाने की अनुमति देता है।




2

मैं स्क्रीन प्रोग्राम के लिए भी जाऊंगा (मुझे पता है कि कुछ और जवाब स्क्रीन था लेकिन यह पूरा हो गया है)

न केवल तथ्य यह है कि & lt; ctrl + z bg disown, nohup, आदि आपको एक बुरा आश्चर्य दे सकते हैं कि जब आप लॉगऑफ जॉब करेंगे तब भी मारे जाएंगे (i dunno क्यों, लेकिन यह मेरे साथ हुआ, और यह परेशान नहीं हुआ इसके कारण मुझे स्क्रीन का उपयोग करने के लिए स्विच किया जा सकता है, लेकिन मुझे लगता है कि एंथोनीराइजर समाधान डबल फोर्किंग से हल हो जाएगा), यह भी स्क्रीन का बैक-ग्राउंडिंग पर एक बड़ा फायदा है:

screen will background your process without losing interactive control to it

और btw, यह एक ऐसा सवाल है जो मैं पहली जगह में कभी नहीं पूछूंगा :) ... मैं किसी भी यूनिक्स में कुछ भी करने की मेरी शुरुआत से स्क्रीन का उपयोग करता हूं ... मैं (लगभग) एक यूनिक्स / लिनक्स खोल में बिना स्क्रीन शुरू किए बिना काम करता हूं पहले ... और मुझे अब रोकना चाहिए, या मैं एक अच्छी प्रस्तुति शुरू करूँगा कि अच्छी स्क्रीन क्या है और फिर क्या कर सकते हैं ... इसे अपने आप से देखें, यह इसके लायक है;)


पीएस anthonyrisinger, आप अच्छे हैं, मैं आपको वह देता हूं लेकिन ... 30 साल? मुझे यकीन है कि एक समाधान है जब &, bg, nohup या स्क्रीन अभी तक नहीं था, और कोई अपराध नहीं है जो मैं आपके ज्ञान की सराहना करता हूं, लेकिन इसका उपयोग करने के लिए बहुत जटिल है :)
THESorcerer

2
(एक तरफ: Tmux देखें ) हालाँकि यह मुझे बहुत पहले से ही घेरता है [1987], &(एसिंक्रोनस निष्पादन) 1971 में थॉम्पसन शेल द्वारा शुरू किया गया था , UNIX के पहले संस्करण के लिए ... इसलिए इसका शाब्दिक अर्थ "हमेशा से रहा है;"; ओरस अलास; मैं भी रूढ़िवादी था - यह वास्तव में 41 साल है।
एंथोनीराइजिंग 4

2

ओपन-सोर्स libslack पैकेज का डेमॉन कमांड भी है ।

daemon काफी विन्यास योग्य है और सभी थकाऊ डेमन सामान जैसे कि स्वचालित पुनरारंभ, लॉगिंग या पिडफाइल हैंडलिंग के बारे में परवाह करता है।


2

इस स्ट्रिंग को अपनी कमांड में जोड़ें:> & - 2> & - <& - &। > & - का अर्थ है पास स्टडआउट। 2> & - का मतलब है क्लोज़र। <और - का अर्थ है पास की स्टडिन। & का मतलब बैकग्राउंड में चलता है। यह प्रोग्राम को ssh के माध्यम से भी नौकरी शुरू करने का काम करता है:

$ ssh myhost 'sleep 30 >&- 2>&- <&- &'
# ssh returns right away, and your sleep job is running remotely
$


1

स्वीकार किए जाते हैं उत्तर nohup का उपयोग कर सुझाव देते हैं । मैं इसके बजाय pm2 का उपयोग करने का सुझाव दूंगा । का उपयोग करते हुए PM2 अधिक nohup आवेदन के लिए लॉग फाइल और बहुत अधिक अन्य सुविधाओं को बनाए रखने के कई फायदे, आवेदन को जीवित रखने की तरह है। अधिक विवरण के लिए इसे देखें

स्थापित करने के लिए PM2 आप डाउनलोड करने की जरूरत है NPM । डेबियन आधारित प्रणाली के लिए

sudo apt-get install npm

और रेडहैट के लिए

sudo yum install npm

या आप इन निर्देशों का पालन कर सकते हैं । स्थापित करने के बाद NPM स्थापित करने के लिए उपयोग यह PM2

npm install pm2@latest -g

एक बार इसके पूरा होने के बाद आप अपना आवेदन शुरू कर सकते हैं

$ pm2 start app.js              # Start, Daemonize and auto-restart application (Node)
$ pm2 start app.py              # Start, Daemonize and auto-restart application (Python)

निम्नलिखित कमांड के उपयोग की प्रक्रिया की निगरानी के लिए:

$ pm2 list                      # List all processes started with PM2
$ pm2 monit                     # Display memory and cpu usage of each app
$ pm2 show [app-name]           # Show all informations about application

ऐप नाम या प्रक्रिया आईडी का उपयोग करके प्रक्रियाओं को प्रबंधित करें या सभी प्रक्रियाओं को एक साथ प्रबंधित करें:

$ pm2 stop     <app_name|id|'all'|json_conf>
$ pm2 restart  <app_name|id|'all'|json_conf>
$ pm2 delete   <app_name|id|'all'|json_conf>

लॉग फ़ाइलों में पाया जा सकता है

$HOME/.pm2/logs #contain all applications logs

Pm2 का उपयोग करके बाइनरी निष्पादन योग्य फाइलें भी चलाई जा सकती हैं। आपको जेसन फ़ाइल में एक बदलाव करना होगा। ( गुण अनुभाग देखें ) "exec_interpreter" : "node", को बदलें ।"exec_interpreter" : "none".

#include <stdio.h>
#include <unistd.h>  //No standard C library
int main(void)
{
    printf("Hello World\n");
    sleep (100);
    printf("Hello World\n");

    return 0;
}

कोड के ऊपर संकलन

gcc -o hello hello.c  

और इसे पृष्ठभूमि में np2 के साथ चलाएं

pm2 start ./hello

क्या इसका उपयोग बाइनरी निष्पादन को चलाने के लिए किया जा सकता है?
GetFree

@मुक्त हो जाओ; हाँ। आप ऐसा कर सकते हैं।
10

कृपया एक उदाहरण जोड़ें। इसका उत्तर अभी जैसा है, ऐसा लगता है कि यह केवल स्क्रिप्ट फ़ाइलों के लिए अच्छा है।
GetFree

@मुक्त हो जाओ; उदाहरण को जोड़ा। अगर आपको कोई समस्या है तो मुझे बताएं।
11

1

सिस्टमड / लिनक्स पर, सत्र-स्वतंत्र प्रक्रियाओं को लॉन्च करने के लिए सिस्टमड-रन एक अच्छा उपकरण है। नफ़रत करने वाले नफ़रत ही करेंगे

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