আমি এসএসএইচ লগ আউট করার পরেও কীভাবে পটভূমিতে পাইথন স্ক্রিপ্টটি চালাব?


110

আমার কাছে পাইথন স্ক্রিপ্ট রয়েছে bgservice.pyএবং আমি এটি সর্বদা চালিত করতে চাই, কারণ এটি আমার নির্মিত ওয়েব পরিষেবার অংশ। আমি এসএসএইচ লগআউট করার পরেও কীভাবে এটি অবিচ্ছিন্নভাবে চালিত করব?

উত্তর:


213

nohup python bgservice.py &হ্যাংআপ সংকেত উপেক্ষা করার জন্য স্ক্রিপ্টটি পেতে চালনা করুন এবং চালিয়ে যান। আউটপুট প্রবেশ করা হবে nohup.out

আদর্শভাবে, আপনি আপনার স্ক্রিপ্টটি এমন কোনও কিছু দিয়ে চালাতেন superviseযাতে এটি (যখন) মারা যায় তা পুনরায় চালু করা যায়।


15
আমি যখন nohup: ignoring in put and appending output to নোহুপ এবং & এর সাথে কমান্ড চালাচ্ছি, তখন আমি nohup.out' message বার্তা পাই এবং যখন আমি প্রসেসটি প্রসেস করি তখন স্ট্যাটাসটি 1 দিয়ে বের হয় What's কী হচ্ছে?
সন্তোষ ঝিমিরে 15

1
nohup.out এ আউটপুট পড়ুন। আমার ক্ষেত্রে এটি অনুমতি সংক্রান্ত সমস্যা ছিল, আমার sudo ব্যবহার করতে হবে
mxns

এবং এই পদ্ধতিতে চালানোর পরে bgservice বন্ধ করার উপায় কীভাবে?
আগুন

1
@ শেগোরাথ কোথাও পিড সংরক্ষণ করুন যাতে আপনি পরে প্রক্রিয়াতে সংকেত পাঠাতে পারেন। কিছু শেল (বাশ, জেডএস, ইত্যাদি) করার পরে somecommand &এটি পিডটি প্রিন্ট করবে [1] 12345। অন্যথায় আপনি ব্যবহার করতে পারেন $!
টনি বিটা ল্যাম্বদা

31

যদি আপনি ইতিমধ্যে প্রক্রিয়াটি শুরু করেছেন, এবং এটি মেরে এবং নোহুপের অধীনে পুনরায় আরম্ভ করতে না চান তবে আপনি এটিকে ব্যাকগ্রাউন্ডে প্রেরণ করতে পারেন, তবে এটি অস্বীকার করুন।

Ctrl+Z (প্রক্রিয়া স্থগিত)

bg (ব্যাকগ্রাউন্ডে প্রক্রিয়া পুনরায় আরম্ভ করুন

disown %1(ধরে নিলাম এটি চাকরি # 1, jobsনির্ধারণের জন্য ব্যবহার করুন)


17

আপনি জিএনইউ স্ক্রিন ব্যবহার করতে পারেন যা প্রতিটি লিনাক্স / ইউনিক্স সিস্টেমে থাকা উচিত।

আপনি যদি উবুন্টু / ডেবিয়ানে থাকেন তবে এর বর্ধিত রূপটি বাইবুও খুব সুন্দর।


12

আপনি এখানে বর্ণনা হিসাবে আপনার পাইথন স্ক্রিপ্টটিকে একটি যথাযথ পাইথন ডেমন হিসাবে রূপান্তর করতে পারেন ।

পাইথন-ডেমন একটি উত্তম সরঞ্জাম যা পাইথন স্ক্রিপ্টগুলি চিরকাল চলমান স্ক্রিপ্টের চেয়ে ব্যাকগ্রাউন্ড ডেমন প্রক্রিয়া হিসাবে চালাতে ব্যবহৃত হতে পারে। আপনার বিদ্যমান কোডটি কিছুটা পরিবর্তন করতে হবে তবে এটি সাধারণ এবং সাধারণ simple

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


সমস্যাটি কীভাবে সমাধান করা যায় সে সম্পর্কে একটি সংক্ষিপ্ত বিবরণ দেওয়া সাধারণত একটি ভাল ধারণা।
নিখিল সাহু


5

সাজসজ্জার ব্যবহার করে অজগরটির অভ্যন্তরে এখানে একটি সহজ সমাধান রয়েছে:

import os, time

def daemon(func):
    def wrapper(*args, **kwargs):
        if os.fork(): return
        func(*args, **kwargs)
        os._exit(os.EX_OK)
    return wrapper

@daemon
def my_func(count=10):    
  for i in range(0,count):
     print('parent pid: %d' % os.getppid())
     time.sleep(1)


my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own

আপনি অবশ্যই আপনার bgservice.pyফাইলের সামগ্রীটি তার জায়গায় প্রতিস্থাপন করতে পারেন my_func


1
সম্ভবত এটি সিএইচএইচপি সংকেতটি ধরা দরকার। তারপরে আপনার ব্লকে সিগন্যাল.সাইনাল (সিগন্যাল.সাইটআপ, হ্যান্ডলার) যুক্ত করুন।
চৌয়েট্টু

3

Zsh শেল nohup দিয়ে চালানো সব ব্যাকগ্রাউন্ড প্রসেস করতে একটি বিকল্প আছে।

ইন ~/.zshrcলাইন যোগ করুন:

setopt nocheckjobs  #don't warn about bg processes on exit
setopt nohup        #don't kill bg processes on exit

তারপরে আপনার ঠিক python bgservice.py &তেমন একটি প্রক্রিয়া চালানো দরকার: এবং আপনার আর নোহপ কমান্ড ব্যবহার করার দরকার নেই।

আমি জানি যে অনেকেই zsh ব্যবহার করেন না, তবে এটি একটি দুর্দান্ত শেল যা আমি সুপারিশ করব would


1

আপনার যা প্রয়োজন তা হ'ল প্রক্রিয়াটি চিরকাল চলতে হবে আপনি লগইন করেছেন বা না থাকুক না কেন, প্রক্রিয়াটি ডেমন হিসাবে চালানো বিবেচনা করুন।

সুপারভাইজার্ড বক্স সমাধানের বাইরে দুর্দান্ত যা কোনও প্রক্রিয়া ডিমনাইজ করতে ব্যবহার করা যেতে পারে। এটিতে আরও একটি নিয়ন্ত্রণকারী ইউটিলিটি রয়েছে supervisorctlযা তত্ত্বাবধায়ক দ্বারা পরিচালিত প্রক্রিয়াগুলি পর্যবেক্ষণ করতে ব্যবহার করা যেতে পারে।

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

পাইথন-ডেমনকে ঘিরে কয়েক ঘন্টা মাথা ফাটিয়ে দেওয়ার পরে সুপারভাইজার হ'ল সমাধানটি যা আমার জন্য কয়েক মিনিটে কাজ করে।

আশা করি এটি পাইথন-ডেমনকে কাজ করার চেষ্টা করা কাউকে সহায়তা করবে



1

এটা চেষ্টা কর:

nohup python -u <your file name>.py >> <your log file>.log &

আপনি স্ক্রিনে কমান্ডের উপরে রান করতে পারেন এবং পর্দা থেকে বেরিয়ে আসতে পারেন।

এখন আপনি আপনার পাইথন স্ক্রিপ্টের লগগুলি এর দ্বারা লেজ করতে পারেন: tail -f <your log file>.log

আপনাকে স্ক্রিপ্টটি মেরে ফেলতে, আপনি PS -aux এবং কিল কমান্ড ব্যবহার করতে পারেন ।

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