উত্তর:
nohup python bgservice.py &
হ্যাংআপ সংকেত উপেক্ষা করার জন্য স্ক্রিপ্টটি পেতে চালনা করুন এবং চালিয়ে যান। আউটপুট প্রবেশ করা হবে nohup.out
।
আদর্শভাবে, আপনি আপনার স্ক্রিপ্টটি এমন কোনও কিছু দিয়ে চালাতেন supervise
যাতে এটি (যখন) মারা যায় তা পুনরায় চালু করা যায়।
somecommand &
এটি পিডটি প্রিন্ট করবে [1] 12345
। অন্যথায় আপনি ব্যবহার করতে পারেন $!
।
যদি আপনি ইতিমধ্যে প্রক্রিয়াটি শুরু করেছেন, এবং এটি মেরে এবং নোহুপের অধীনে পুনরায় আরম্ভ করতে না চান তবে আপনি এটিকে ব্যাকগ্রাউন্ডে প্রেরণ করতে পারেন, তবে এটি অস্বীকার করুন।
Ctrl+Z
(প্রক্রিয়া স্থগিত)
bg
(ব্যাকগ্রাউন্ডে প্রক্রিয়া পুনরায় আরম্ভ করুন
disown %1
(ধরে নিলাম এটি চাকরি # 1, jobs
নির্ধারণের জন্য ব্যবহার করুন)
আপনি জিএনইউ স্ক্রিন ব্যবহার করতে পারেন যা প্রতিটি লিনাক্স / ইউনিক্স সিস্টেমে থাকা উচিত।
আপনি যদি উবুন্টু / ডেবিয়ানে থাকেন তবে এর বর্ধিত রূপটি বাইবুও খুব সুন্দর।
আপনি এখানে বর্ণনা হিসাবে আপনার পাইথন স্ক্রিপ্টটিকে একটি যথাযথ পাইথন ডেমন হিসাবে রূপান্তর করতে পারেন ।
পাইথন-ডেমন একটি উত্তম সরঞ্জাম যা পাইথন স্ক্রিপ্টগুলি চিরকাল চলমান স্ক্রিপ্টের চেয়ে ব্যাকগ্রাউন্ড ডেমন প্রক্রিয়া হিসাবে চালাতে ব্যবহৃত হতে পারে। আপনার বিদ্যমান কোডটি কিছুটা পরিবর্তন করতে হবে তবে এটি সাধারণ এবং সাধারণ simple
যদি আপনি পাইথন-ডেমন নিয়ে সমস্যায় পড়ে থাকেন তবে আর একটি ইউটিলিটি সুপারভাইজার রয়েছে যা আপনার জন্য একই কাজ করবে, তবে এই ক্ষেত্রে আপনাকে কোনও কোড লিখতে হবে না (বা বিদ্যমান পরিবর্তন করতে হবে) কারণ এটি ডিমনাইজিংয়ের বাক্স সমাধানের বাইরে out প্রক্রিয়া।
আপনি এটি nohup করতে পারেন, কিন্তু আমি পর্দা পছন্দ ।
সাজসজ্জার ব্যবহার করে অজগরটির অভ্যন্তরে এখানে একটি সহজ সমাধান রয়েছে:
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
।
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
আপনার যা প্রয়োজন তা হ'ল প্রক্রিয়াটি চিরকাল চলতে হবে আপনি লগইন করেছেন বা না থাকুক না কেন, প্রক্রিয়াটি ডেমন হিসাবে চালানো বিবেচনা করুন।
সুপারভাইজার্ড বক্স সমাধানের বাইরে দুর্দান্ত যা কোনও প্রক্রিয়া ডিমনাইজ করতে ব্যবহার করা যেতে পারে। এটিতে আরও একটি নিয়ন্ত্রণকারী ইউটিলিটি রয়েছে supervisorctl
যা তত্ত্বাবধায়ক দ্বারা পরিচালিত প্রক্রিয়াগুলি পর্যবেক্ষণ করতে ব্যবহার করা যেতে পারে।
এই কাজটি করতে আপনাকে কোনও অতিরিক্ত কোড লিখতে বা বিদ্যমান স্ক্রিপ্টগুলি সংশোধন করতে হবে না। তদুপরি, ভার্বোজ ডকুমেন্টেশন এই প্রক্রিয়াটিকে আরও সহজ করে তোলে।
পাইথন-ডেমনকে ঘিরে কয়েক ঘন্টা মাথা ফাটিয়ে দেওয়ার পরে সুপারভাইজার হ'ল সমাধানটি যা আমার জন্য কয়েক মিনিটে কাজ করে।
আশা করি এটি পাইথন-ডেমনকে কাজ করার চেষ্টা করা কাউকে সহায়তা করবে
আপনি ইয়াপদী ব্যবহার করতে পারেন :
বেসিক ব্যবহার:
import yapdi daemon = yapdi.Daemon() retcode = daemon.daemonize() # This would run in daemon mode; output is not visible if retcode == yapdi.OPERATION_SUCCESSFUL: print('Hello Daemon')
এটা চেষ্টা কর:
nohup python -u <your file name>.py >> <your log file>.log &
আপনি স্ক্রিনে কমান্ডের উপরে রান করতে পারেন এবং পর্দা থেকে বেরিয়ে আসতে পারেন।
এখন আপনি আপনার পাইথন স্ক্রিপ্টের লগগুলি এর দ্বারা লেজ করতে পারেন: tail -f <your log file>.log
আপনাকে স্ক্রিপ্টটি মেরে ফেলতে, আপনি PS -aux এবং কিল কমান্ড ব্যবহার করতে পারেন ।
nohup: ignoring in put and appending output to
নোহুপ এবং & এর সাথে কমান্ড চালাচ্ছি, তখন আমি nohup.out' message বার্তা পাই এবং যখন আমি প্রসেসটি প্রসেস করি তখন স্ট্যাটাসটি 1 দিয়ে বের হয় What's কী হচ্ছে?