আমার পাইথনের পটভূমি প্রক্রিয়াটি যখন এসএসএইচ সেশনটি বন্ধ হয়ে যায় তখন কেন?


19

আমার কাছে বাশ স্ক্রিপ্ট রয়েছে যা startup.shমূল লাইন দিয়ে পাইথন 3 স্ক্রিপ্ট শুরু করা যাক (আসুন এটি কল করুন ):

nohup python3 -u <script> &

আমি যখন sshসরাসরি এই স্ক্রিপ্টটিতে প্রবেশ করি এবং কল করি, তখন বাইরে বের হওয়ার পরে পাইথন স্ক্রিপ্টটি পটভূমিতে চলতে থাকবে। তবে, আমি যখন এটি চালাচ্ছি:

ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "./startup.sh"

প্রক্রিয়াটি শেষ হয়ে যাওয়ার সাথে সাথে sshএটি শেষ হয়ে যায় এবং সেশনটি বন্ধ করে দেয়।

এই দুটির মধ্যে পার্থক্য কী?

সম্পাদনা: পাইথন স্ক্রিপ্ট বোতল মাধ্যমে একটি ওয়েব পরিষেবা চালাচ্ছে।

সম্পাদনা 2: আমি একটি এনআর স্ক্রিপ্ট তৈরি করার চেষ্টা করেছি যা কল করে startup.shদৌড়েছিল ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "sudo service start <servicename>", কিন্তু একই আচরণ পেয়েছে।

সম্পাদনা 3: সম্ভবত এটি স্ক্রিপ্টের অন্য কিছু। এখানে স্ক্রিপ্টের বেশিরভাগ অংশ রয়েছে:

chmod 700 ${key_loc}

echo "INFO: Syncing files."
rsync -azP -e "ssh -i ${key_loc} -o StrictHostKeyChecking=no" ${source_client_loc} ${remote_user}@${remote_hostname}:${destination_client_loc}

echo "INFO: Running startup script."
ssh -i ${key_loc} -o StrictHostKeyChecking=no ${remote_user}@${remote_hostname} "cd ${destination_client_loc}; chmod u+x ${ctl_script}; ./${ctl_script} restart"

সম্পাদনা 4: আমি যখন শেষ প্রান্তে ঘুম দিয়ে শেষ পংক্তিটি চালাই:

ssh -i ${key_loc} -o StrictHostKeyChecking=no ${remote_user}@${remote_hostname} "cd ${destination_client_loc}; chmod u+x ${ctl_script}; ./${ctl_script} restart; sleep 1"

echo "Finished"

এটি কখনও পৌঁছায় না echo "Finished"এবং আমি বোতল সার্ভার বার্তাটি দেখি, যা আমি আগে কখনও দেখিনি:

Bottle vx.x.x server starting up (using WSGIRefServer())...
Listening on <URL>
Hit Ctrl-C to quit.

আমি নিজেই এসএসএইচ প্রবেশ করি এবং প্রক্রিয়াটি নিজেই মেরে ফেললে আমি "সমাপ্ত" দেখতে পাচ্ছি।

EDIT5: EDIT4 ব্যবহার করে, আমি যদি কোনও শেষ পয়েন্টে একটি অনুরোধ জানাই, তবে আমি একটি পৃষ্ঠা ফিরে পেয়েছি, তবে বোতলটির ত্রুটিগুলি রয়েছে:

Bottle vx.x.x server starting up (using WSGIRefServer())...
Listening on <URL>
Hit Ctrl-C to quit.


----------------------------------------
Exception happened during processing of request from ('<IP>', 55104)

পাইথন লিপিটি কী করে তার আরও বিবরণ পেতে আমরা কি কোনও উপায় পেতে পারি? আপনি সম্ভবত এখনও সম্পূর্ণ উত্স কোড ছাড়াই অনুমানগুলি পেতে চাইবেন তবে পাইথন স্ক্রিপ্টটি কী করে সে সম্পর্কে আরও জানার ফলে আমাদের আরও উন্নত শিক্ষিত অনুমান করা যায়।
ব্র্যাচলে

হ্যাঁ - প্রশ্ন যুক্ত হয়েছে।
neverendingqs

স্ক্রিপ্টটি প্রথম দিকে কিছুটা করাতে পারে যে কোনওভাবে এটি সংযুক্ত টার্মিনাল বা এর মতো কোনও কিছুর উপর নির্ভর করে এবং এটি একটি সময়সীমা হতে পারে: সেশনটি যদি প্রথম কয়েক সেকেন্ড স্থায়ী হয় তবে এটি কার্যকর হয় না otherwise আপনার সেরা বিকল্পটি হতে পারে আপনি straceলিনাক্স ব্যবহার করছেন বা trussআপনি যদি সোলারিস চালাচ্ছেন এবং এটি কীভাবে / কেন সমাপ্ত হয় তা দেখুন under যেমন উদাহরণস্বরূপ ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> strace -fo /tmp/debug ./startup.sh
সেলেদা

আপনি কি &স্টার্ট আপ স্ক্রিপ্টের শেষে ব্যবহার করার চেষ্টা করেছিলেন? জোড় যোগ করা &আপনার এসএস সেশনের নির্ভরতা পিতামাতাদের আইডি হওয়ার থেকে দূরে সরিয়ে দেয় (যখন প্যারেন্ট আইডস মারা যায় তাদের সন্তানদেরও হয়)। এছাড়াও আমি এই আগের পোস্টের উপর ভিত্তি করে এটি একটি সদৃশ প্রশ্ন মনে করি । পূর্ববর্তী বাক্যে আমি আপনাকে যে পোস্টটি জমা দিয়েছি তা হ'ল এই পোস্টের সদৃশ যা আরও বিশদ বিবরণ দিতে পারে।
জ্যাকব ব্রায়ান

আমি nohup ./startup.sh &আগেও চেষ্টা করেছি , তবে এর একই ব্যবহার ছিল। startup.shইতিমধ্যে একটি কাঁটাচামচ রয়েছে ( nohup python3 -u <script> &), সুতরাং আমি নিশ্চিত যে আমার আর কাঁটাচামচ করার দরকার নেই।
neverendingqs

উত্তর:


11

আমি আদেশটিকে তার স্ট্যান্ডার্ড ইনপুট / আউটপুট এবং ত্রুটি প্রবাহ থেকে সংযোগ বিচ্ছিন্ন করব:

nohup python3 -u <script> </dev/null >/dev/null 2>&1 &  

sshএমন একটি সূচক প্রয়োজন যার আর কোনও আউটপুট নেই এবং এটির জন্য আর কোনও ইনপুট লাগবে না। ইনপুট হতে অন্য কোনও জিনিস থাকা এবং আউটপুট পুনঃনির্দেশ করা মানে sshনিরাপদে প্রস্থান হতে পারে, কারণ ইনপুট / আউটপুট টার্মিনালে থেকে আসে না বা যায় না। এর অর্থ ইনপুটটি অন্য কোথাও থেকে আসতে হবে এবং আউটপুট (এসটিডিআউট এবং এসটিডিআরআর উভয়) অন্য কোথাও যেতে হবে।

</dev/nullঅংশ নির্দিষ্ট করে /dev/nullজন্য ইনপুট হিসাবে <script>। কেন এখানে দরকারী:

স্টিডিনে / dev / নালটিকে পুনঃনির্দেশিত করা সেই প্রক্রিয়া থেকে যে কোনও পঠন কলকে তাত্ক্ষণিক EOF দেবে। এটি সাধারণত টাইটি থেকে প্রক্রিয়া বিচ্ছিন্ন করার জন্য দরকারী (যেমন প্রক্রিয়াটিকে ডেমন বলা হয়)। উদাহরণস্বরূপ, ssh- র মাধ্যমে দূরবর্তী অবস্থানের একটি পটভূমি প্রক্রিয়া শুরু করার সময়, স্থানীয় ইনপুটটির অপেক্ষায় থাকা প্রক্রিয়াটি রোধ করতে আপনাকে স্টিডিন পুনর্নির্দেশ করতে হবে। /programming/19955260/what-is-dev-null-in-bash/19955475#19955475

বিকল্পভাবে, যতক্ষণ না বর্তমান sshঅধিবেশনটি উন্মুক্ত রাখার দরকার নেই ততক্ষণ অন্য ইনপুট উত্স থেকে পুনর্নির্দেশ তুলনামূলকভাবে নিরাপদ হওয়া উচিত ।

সঙ্গে >/dev/nullঅংশ শেল, / dev / নাল মূলত এটা খারিজ ভাষা Standard আউটপুট পুননির্দেশনা। >/path/to/fileকাজ করবে।

শেষ অংশটি 2>&1STDERR কে STDOUT এ পুনঃনির্দেশ করছে।

একটি প্রোগ্রামের জন্য তিনটি স্ট্যান্ডার্ড ইনপুট এবং আউটপুট রয়েছে। স্ট্যান্ডার্ড ইনপুটটি সাধারণত কোনও ইন্টারেক্টিভ প্রোগ্রাম হলে কীবোর্ড থেকে আসে বা অন্য প্রোগ্রাম থেকে এটি অন্য প্রোগ্রামের আউটপুট প্রক্রিয়াজাত হয়। প্রোগ্রামটি সাধারণত স্ট্যান্ডার্ড আউটপুট প্রিন্ট করে এবং কখনও কখনও স্ট্যান্ডার্ড ত্রুটিতে প্রিন্ট করে। এই তিনটি ফাইল বর্ণনাকারী (আপনি তাদের "ডেটা পাইপ" হিসাবে ভাবতে পারেন) প্রায়শই এসটিডিএন, এসটিডিআউট এবং এসটিডিআরআর বলে।

কখনও কখনও তাদের নাম দেওয়া হয় না, তারা সংখ্যাযুক্ত! তাদের জন্য অন্তর্নির্মিত নম্বরগুলি 0, 1 এবং 2 হয়। ডিফল্টরূপে, আপনি যদি নাম বা স্পষ্টভাবে এক নম্বর না করেন, আপনি STDOUT সম্পর্কে কথা বলছেন।

সেই প্রসঙ্গে আপনি দেখতে পাচ্ছেন যে উপরের কমান্ডটি স্ট্যান্ডার্ড আউটপুটটিকে / dev / নুলে পুনঃনির্দেশ করছে, যা এমন একটি জায়গা যা আপনি চান না এমন কিছু ফেলে দিতে পারেন (প্রায়শই বিট-বালতি বলে) তারপর স্ট্যান্ডার্ড ত্রুটিটিকে স্ট্যান্ডার্ড আউটপুটে পুনঃনির্দেশ করা ( আপনি যখন এটি করবেন তখন আপনাকে গন্তব্যটির সামনে রাখতে হবে &)।

সুতরাং, সংক্ষিপ্ত ব্যাখ্যাটি হ'ল "এই কমান্ডটি থেকে সমস্ত আউটপুট একটি কৃষ্ণগহ্বরে পরিণত করা উচিত really" প্রোগ্রামটি সত্যই শান্ত করার এটি একটি দুর্দান্ত উপায়!
</ Dev / null 2> & 1 এর অর্থ কী? | Xaprb


nohup python3 -u <script> >/dev/null 2>&1 &এবং nohup python3 -u <script> > nohup.out 2>&1 &কাজ। আমি ভেবেছিলাম Nohup স্বয়ংক্রিয়ভাবে সমস্ত আউটপুট পুনঃনির্দেশ করে - পার্থক্য কি?
neverendingqs

@neverendingqs, nohupআপনার দূরবর্তী হোস্টে আপনার কী সংস্করণ রয়েছে ? nohupপুনর্নির্দেশের জন্য কোনও পসিক্সের প্রয়োজন হয় না stdin, যা আমি মিস করেছি তবে এটি এখনও পুনর্নির্দেশ করা উচিত stdoutএবং stderr
গ্রীম

দেখে মনে হচ্ছে আমি কাজ করছি nohup (GNU coreutils) 8.21
neverendingqs

@neverendingqs, nohupকোনও বার্তা প্রিন্ট করে, পছন্দ করে nohup: ignoring input and appending output to ‘nohup.out’?
গ্রামীণ

হ্যাঁ - এটি হ'ল সঠিক বার্তা।
neverendingqs

3

দেখুন man ssh:

 ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
     [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-L [bind_address:]port:host:hostport]
     [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
     [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
     [user@]hostname [command]

আপনি যখন চালনা করেন ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "./startup.sh"আপনি শেল স্ক্রিপ্ট স্টার্টআপ.শকে ssh কমান্ড হিসাবে চালাচ্ছেন।

বর্ণনা থেকে:

যদি কমান্ডটি নির্দিষ্ট করা থাকে তবে এটি লগইন শেলের পরিবর্তে দূরবর্তী হোস্টে সম্পাদন করা হয়।

এর ভিত্তিতে এটি স্ক্রিপ্টটি দূর থেকে চালানো উচিত।

nohup python3 -u <script> &আপনার স্থানীয় টার্মিনালে এটির ও চলমান পার্থক্যটি হ'ল এটি স্থানীয় পটভূমি প্রক্রিয়া হিসাবে চলে যখন ssh কমান্ড এটিকে দূরবর্তী পটভূমি প্রক্রিয়া হিসাবে চালানোর চেষ্টা করে।

আপনি যদি স্থানীয়ভাবে স্ক্রিপ্টটি চালাতে চান তবে ssh কমান্ডের অংশ হিসাবে startup.sh চালাবেন না। আপনি কিছু চেষ্টা করতে পারেনssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> && "./startup.sh"

যদি আপনার উদ্দেশ্যটি স্ক্রিপ্টটি দূরবর্তীভাবে চালিত করা হয় এবং আপনি চান যে আপনার ssh অধিবেশন শেষ হওয়ার পরে এই প্রক্রিয়াটি অবিরত থাকে, আপনাকে প্রথমে একটি শুরু করতে হবে screen দূরবর্তী হোস্টে সেশন । তারপরে আপনাকে স্ক্রিনের মধ্যে পাইথন স্ক্রিপ্টটি চালাতে হবে এবং এটি আপনার ssh অধিবেশন শেষ করার পরে চলতে থাকবে।

দেখুন স্ক্রিন ব্যবহারকারী এর ম্যানুয়াল

যদিও আমি মনে করি পর্দাটি আপনার সেরা বিকল্প, যদি আপনার অবশ্যই নোহুপ ব্যবহার shopt -s huponexitকরা হয় তবে নোহপ কমান্ড চালানোর আগে দূরবর্তী হোস্টে সেট করা বিবেচনা করুন। বিকল্পভাবে, আপনি disown -h [jobID]প্রক্রিয়াটি চিহ্নিত করতে ব্যবহার করতে পারেন যাতে সাইনআপ এটিতে প্রেরণ করা হবে না। 1

আমি পটভূমিতে শেল প্রম্পট থেকে প্রস্থান করার পরে কীভাবে চলমান কাজ চালিয়ে যাব?

SIGHUP (হ্যাঙ্গআপ) সিগন্যালটি আপনার সিস্টেম দ্বারা টার্মিনাল নিয়ন্ত্রণের প্রক্রিয়া বা মৃত্যুর নিয়ন্ত্রণে ব্যবহৃত হয়। আপনি কনফিগারেশন ফাইলগুলি পুনরায় লোড করতে এবং লগ ফাইলগুলি খুলতে / বন্ধ করতে সাইনআপ ব্যবহার করতে পারেন। অন্য কথায় আপনি যদি আপনার টার্মিনাল থেকে লগআউট করেন তবে চলমান সমস্ত কাজ শেষ হয়ে যাবে। এটি এড়ানোর জন্য আপনি কমান্ড অস্বীকার করার -h বিকল্পটি পাস করতে পারেন। এই বিকল্পটি প্রতিটি কাজের আইডিকে চিহ্নিত করে যাতে শেলটি যদি একটি সিএইচএইচপি গ্রহণ করে তবে SIGHUP কাজটিতে প্রেরণ করা হয় না।

এছাড়াও, huponexitযখন শেলটি বের হয়, নিহত হয় বা নামানো হয় তখন কীভাবে কাজ করে তার এই সংক্ষিপ্তসারটি দেখুন । আমি অনুমান করছি যে আপনার বর্তমান সমস্যাটি শেল সেশনটি কীভাবে শেষ হবে সম্পর্কিত। 2

  1. এসএসএস সংযোগে খোলা শেলটির ব্যাকগ্রাউন্ড বা না থাকা সমস্ত শিশু প্রসেসগুলি হুপোনেক্সিট বিকল্পটি সেট করা থাকলেই এসএসএইচপি-র সাথে নিহত করা হয়: এটি সত্য কিনা তা দেখার জন্য শপট হুপোনেক্সিট চালান।

  2. হুপোনেক্সিট যদি সত্য হয়, তবে শেল থেকে প্রক্রিয়াটি আলাদা করতে আপনি নোহপ ব্যবহার করতে পারেন বা অস্বীকার করতে পারেন যাতে আপনি প্রস্থান করার সময় এটি মারা যায় না। বা, পর্দা দিয়ে জিনিস চালান।

  3. যদি হুপোনেক্সিটটি মিথ্যা হয়, যা আজকাল কমপক্ষে কয়েকটি লিনাক্সের উপর ডিফল্ট হয়, তবে ব্যাকগ্রাউন্ডযুক্ত কাজগুলি সাধারণ লগআউটে মারা যায় না।

  4. তবে হুপোনেক্সিটটি মিথ্যা হলেও, যদি এসএসএস সংযোগটি মারা যায় বা ড্রপ হয় (সাধারণ লগআউটের চেয়ে পৃথক), তবে পশ্চাদপটে প্রক্রিয়াগুলি এখনও মারা যাবে। এটি (2) হিসাবে অস্বীকার বা নুহুপ দ্বারা এড়ানো যায়।

অবশেষে শপ হুপোনেক্সিট কীভাবে ব্যবহার করবেন তার কয়েকটি উদাহরণ এখানে। 3

$ shopt -s huponexit; shopt | grep huponexit
huponexit       on
# Background jobs will be terminated with SIGHUP when shell exits

$ shopt -u huponexit; shopt | grep huponexit
huponexit       off
# Background jobs will NOT be terminated with SIGHUP when shell exits

bashম্যান পেজ অনুসারে , huponexitকেবলমাত্র ইন্টারেক্টিভ শেলগুলিকে প্রভাবিত করা উচিত এবং স্ক্রিপ্টগুলিতে নয় - 'যদি হুপোনেক্সিট শেল বিকল্পটি শপ্টের সাথে সেট করা থাকে, তবে ইন্টারেক্টিভ লগইন শেলটি প্রস্থান করলে বাশ সমস্ত চাকরিতে একটি SIGHUP প্রেরণ করে' '
গ্রীম

2

-nএকটি বিকল্প যখন চেষ্টা শুরু মূল্য ssh? এটি কোনও স্থানীয়ের উপর দূরবর্তী প্রক্রিয়া নির্ভরতা রোধ করবে stdin, যা অবশ্যই ssh sessionশেষের সাথে সাথে বন্ধ হয়ে যায় । আর এই দূরবর্তী থাকার পরিসমাপ্তি যখনই তার অ্যাক্সেস করার চেষ্টা করে কারণ হবে stdin


কোনও সাফল্য ছাড়াই এটি চেষ্টা করে = [।
neverendingqs

2

আমি সন্দেহ করি তোমার রেসের অবস্থা আছে। এটি এমন কিছু হবে:

  • এসএসএইচ সংযোগ শুরু হয়
  • এসএসএইচ শুরু হয় startup.sh
  • startup.sh একটি পটভূমি প্রক্রিয়া শুরু করে (nohup)
  • startup.sh সমাপ্ত
  • ssh সমাপ্ত হয়, এবং এটি শিশু প্রক্রিয়াগুলি (যেমন Nohup) হত্যা করে

যদি এসএস জিনিসগুলি ছোট না করে, তবে নিম্নলিখিতগুলি ঘটতে পারে (এই দুটিয়ের ক্রম সম্পর্কে নিশ্চিত নয়):

  • নোহুপ আপনার অজগর স্ক্রিপ্ট শুরু করে
  • nohup পিতামাতার প্রক্রিয়া এবং টার্মিনাল থেকে সংযোগ বিচ্ছিন্ন করে।

সুতরাং চূড়ান্ত দুটি সমালোচনামূলক পদক্ষেপগুলি ঘটবে না, কারণ নোহুপের কাজ করার সময় হওয়ার আগেই স্টার্টআপ.শ এবং এসএস ফিনিস।

আমি আশা করি আপনি startup.sh এর শেষে কয়েক সেকেন্ড ঘুম রাখলে আপনার সমস্যাটি চলে যাবে। আপনার ঠিক কতটা সময় দরকার তা আমি নিশ্চিত নই। যদি এটি সর্বনিম্ন রাখা গুরুত্বপূর্ণ, তবে সম্ভবত আপনি নিরাপদ কখন তা দেখতে নিরাপদে কিছু দেখতে পারেন।


ভাল কথা, এটির জন্য উইন্ডোটি দীর্ঘ হবে বলে মনে করবেন না - সম্ভবত কয়েক মিলিসেকেন্ডই। আপনি পরীক্ষা /proc/$!/commকরতে পারেন nohupবা এর বেশি আউটপুট বহনযোগ্য ব্যবহার করে না ps -o comm= $!
গ্রামীণ

এটি স্বাভাবিক লগআউটের জন্য কাজ করা উচিত, তবে যখন সেশনটি বাদ দেওয়া হয় বা হত্যা করা হয় তখন কী হবে? আপনি কি এখনও চাকুরীটি অস্বীকার করার প্রয়োজন নেই তাই দীর্ঘশ্বাস ফেলে এটিকে সম্পূর্ণ উপেক্ষা করা উচিত?
আইরিন

@ রায়ানলোরেম্পসসাম: স্টার্টআপ স্ক্রিপ্টটিতে কেবলমাত্র শিশু প্রক্রিয়া সম্পূর্ণরূপে বিচ্ছিন্ন হয়ে যাওয়ার জন্য যথেষ্ট দীর্ঘ অপেক্ষা করতে হবে। এর পরে, ssh অধিবেশনটি কী হয় তা বিবেচ্য নয়। যদি ঘটে যাওয়ার সময় সংক্ষিপ্ত উইন্ডোতে আপনার এসএস সেশনটিকে অন্য কোনও কিছু হত্যা করে তবে আপনি এটি করার মতো খুব বেশি কিছু করতে পারেন না।
mc0e

@ গ্র্যাম হ্যাঁ, আমি অনুমান করি যে এটি খুব দ্রুত, তবে নোহপ নিশ্চিতভাবে কী করতে পারে তা সম্পর্কে আমি কেবল যথেষ্ট জানি না। এটিতে কোনও অনুমোদনকারী (বা কমপক্ষে জ্ঞানীয় এবং বিশদ) উত্সের একটি নির্দেশক কার্যকর হবে।
mc0e

এটি সম্পর্কে কীভাবে - lingrok.org/xref/coreutils/src/nohup.c
গ্রীম

1

এটি pythonস্ক্রিপ্ট বা pythonনিজে যা করছে তা নিয়ে ইস্যুটির মতো আরও শোনাচ্ছে । nohupসত্যিই যা কিছু করে (বার সরলকরণ পুনঃনির্দেশগুলি) প্রোগ্রামটি চালানোর আগে (উপেক্ষা করার জন্য) HUPসিগন্যালের জন্য হ্যান্ডলারটি কেবল সেট করে SIG_IGN। প্রোগ্রামটি চালু হওয়ার পরে এটি পুনরায় সেট করা SIG_DFLবা এটির নিজের হ্যান্ডলারটি ইনস্টল করার কিছু নেই is

একটি জিনিস যা আপনি চেষ্টা করতে চাইতে পারেন তা হ'ল বন্ধনীতে আপনার কমান্ডটি আবদ্ধ করা যাতে আপনি দ্বিগুণ কাঁটাচামচ প্রভাব পান এবং আপনার pythonস্ক্রিপ্টটি আর শেল প্রক্রিয়াটির শিশু নয়। উদাহরণ:

( nohup python3 -u <script> & )

আরেকটি জিনিস যা চেষ্টা bashকরার disownমতোও হতে পারে (যদি আপনি ব্যবহার করছেন এবং অন্য শেল নাও) তবে তার পরিবর্তে বিল্টিন ব্যবহার করা nohup। যদি সবকিছু নথিভুক্ত হিসাবে কাজ করে তবে এটিকে আসলে কোনও পার্থক্য করা উচিত নয়, তবে একটি ইন্টারেক্টিভ শেলের মধ্যে এটি HUPআপনার pythonস্ক্রিপ্টে প্রচার থেকে সংকেতটি থামিয়ে দেবে । আপনি পরের লাইনে অস্বীকার যুক্ত করতে পারেন বা নীচের মত একইটি (নোট ;পরে একটি যুক্ত করার &ক্ষেত্রে একটি ত্রুটি রয়েছে bash):

python3 -u <script> </dev/null &>/dev/null & disown

যদি উপরের বা এর কোনও সংমিশ্রণটি কাজ না করে তবে অবশ্যই সমস্যাটি সমাধানের একমাত্র জায়গাটি pythonস্ক্রিপ্টেই রয়েছে।


দ্বৈত কাঁটাচামচ প্রভাব কি যথেষ্ট হবে (@ রায়ানলোরেম্পসামের উত্তরের ভিত্তিতে)?
neverendingqs

দুজনেই সমস্যাটিকে সমাধান করেনি = [। যদি এটি পাইথন ইস্যু হয় তবে কোথায় তদন্ত শুরু করতে হবে (পাইথন স্ক্রিপ্টটি এখানে খুব বেশি পোস্ট করতে পারে না) সে সম্পর্কে কী আপনার ধারণা আছে?
neverendingqs

@ নিউভেনরিডিংস, যদি আপনার স্টাফটি বোঝানো হয় তবে সাব-শেলটিতে huponexitচলমান কাজটির তালিকায় disownযেমন প্রক্রিয়া যুক্ত হবে না তেমনই প্রভাব ফেলতে হবে।
গ্রিম

@neverendingqs, আমার উত্তর আপডেট করেছেন। ভুলে গেছেন যে আপনার সাথে পুনঃনির্দেশগুলি ব্যবহার করা উচিত disown। আশা করিও না যে এটি যদিও খুব বেশি পার্থক্য অর্জন করবে। আমি মনে করি আপনার সেরা বাজি হ'ল pythonস্ক্রিপ্টটি পরিবর্তন করা যাতে এটি আপনাকে জানায় যে এটি কেন বন্ধ হচ্ছে।
গ্রিম

আউটপুটটি পুনর্নির্দেশ করা হয়েছে ( unix.stackexchange.com/a/176610/52894 ), তবে আমি নিশ্চিত নই যে এটি স্পষ্টভাবে করা এবং এটি করার মধ্যে পার্থক্য কী nohup
neverendingqs

0

আমি মনে করি এটি কারণ অধিবেশন জড়িত। এটি শেষ হয়ে গেলে যে কোনও ব্যবহারকারীর কাজও শেষ হয়ে যায়।


2
তবে কেন টার্মিনাল পাওয়া, কমান্ডটি টাইপ করা এবং চালানো এবং প্রস্থান করা থেকে আলাদা? দু'টি অধিবেশন বন্ধ হয়ে গেলে আমি এটি বন্ধ করি।
neverendingqs

সম্মত হন, আমি বুঝতে চাই যে এটি কেন আপনার নিজের টার্মিনাল ম্যানুয়ালি বন্ধ করার থেকে আলাদা নয়।
অবিন্দ্র গলচরণ

0

যদি nohupএর আউটপুট ফাইলটি খুলতে পারে তবে আপনার একটি চিহ্ন থাকতে পারে nohup.outpythonআপনি যখন স্ক্রিপ্টটি দিয়ে চালাচ্ছেন এটি সম্ভব নয়ssh

কমান্ডের জন্য একটি লগ ফাইল তৈরি করার চেষ্টা করব। ব্যবহার করার চেষ্টা করুন:

nohup /usr/bin/python3 -u <script> &>logfile &

আমি sshস্ক্রিপ্টটি ম্যানুয়ালি চালাতে ব্যবহার করি , তাই আমি ধরে নিচ্ছি অজগর 3 এর পথে রয়েছে।
neverendingqs

লগফাইলে কি কিছু রয়েছে?
বিলথোর

সাধারণ কিছু নয় - শুরুটি স্বাভাবিক দেখায়।
neverendingqs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.