আমি ভিপিএস-এ উবুন্টুতে একটি অজগর স্ক্রিপ্টটি চালাচ্ছি। এটি মেশিন লার্নিং প্রশিক্ষণ প্রক্রিয়া তাই প্রশিক্ষণে প্রচুর সময় নিন। কীভাবে আমি এই প্রক্রিয়াটি না থামিয়ে পুটি বন্ধ করতে পারি।
আমি ভিপিএস-এ উবুন্টুতে একটি অজগর স্ক্রিপ্টটি চালাচ্ছি। এটি মেশিন লার্নিং প্রশিক্ষণ প্রক্রিয়া তাই প্রশিক্ষণে প্রচুর সময় নিন। কীভাবে আমি এই প্রক্রিয়াটি না থামিয়ে পুটি বন্ধ করতে পারি।
উত্তর:
আপনার দুটি প্রধান পছন্দ রয়েছে:
কমান্ডটি দিয়ে রান করুন nohup
। এটি এটি আপনার সেশন থেকে আলাদা করে দেবে এবং আপনার সংযোগ বিচ্ছিন্ন করার পরে এটি চালিয়ে যেতে দেবে:
nohup pythonScript.py
নোট করুন যে কমান্ডের stdout একটি ফাইলের সাথে যুক্ত করা হবে nohup.out
যদি না আপনি এটি পুনঃনির্দেশ করেন ( nohup pythonScript.py > outfile
)।
মত একটি স্ক্রিন মাল্টিপ্লেক্সার ব্যবহার করুন tmux
। এটি আপনাকে রিমোট মেশিন থেকে সংযোগ বিচ্ছিন্ন করতে দেবে কিন্তু এরপরে, আপনি যখন tmux attach
আবার সংযোগ করবেন, আপনি আবার দৌড়ালে , আপনি ঠিক একই সেশনে নিজেকে খুঁজে পাবেন। কমান্ডটি এখনও চলমান থাকবে (আপনি লগ আউট করার সময় এটি চলতে থাকবে) এবং আপনি এর স্টাডআউট এবং স্টাডারকে ঠিক এমনভাবে দেখতে সক্ষম হবেন যেমন আপনি কখনই লগ আউট করেন নি:
tmux
pythonScript.py
একবার আপনি এটি চালু করার পরে, কেবল পটিটিওয়াই উইন্ডোটি বন্ধ করুন। তারপরে, পরের দিন আবার সংযোগ করুন, আবার দৌড়াবেন tmux attach
এবং আপনি যেখানে ফিরে এসেছেন সেখানে ফিরে আসুন।
disown
2.screen
byobu
, tmux বা পর্দার চারপাশে একটি মোড়ক।
screen
টুল, সব লিনাক্স ডিস্ট্রো জন্য উপলব্ধ, এই সমর্থন করে।
এটি ইনস্টল করার জন্য, চালানোর apt-get install screen
দেবের ভিত্তিক লিনাক্স ডিস্ট্রো, অথবা
dnf install -y screen
বা yum install -y screen
আরপিএম-ভিত্তিক বেশী জন্য।
ব্যবহার করা:
$ screen
একটি নতুন শেল শুরু হয়েছে। এই শেলটিতে, আপনি আপনার পাইথন স্ক্রিপ্ট শুরু করতে পারেন। তারপর আপনি টিপতে পারেন Ctrl+ + Shift+ + Aতারপর D। এটি আপনার স্ক্রিপ্টটি চালাচ্ছে এমন শেল থেকে আপনার টার্মিনালটিকে আলাদা করবে। তদ্ব্যতীত, স্ক্রিপ্টটি এখনও এতে চলছে।
আপনার স্ক্রিপ্টটি কীভাবে চলছে তা দেখতে আপনি কল করতে পারেন screen -r
। এটি ব্যাকগ্রাউন্ডে আপনি যে পাইথন স্ক্রিপ্টটি রেখে গেছেন তাতে শেলটিতে আপনার টার্মিনালটিকে পুনরায় যুক্ত করবে।
ইউপিডি: ফক্স যেমন উল্লেখ করেছে, স্ক্রিনটি সিস্টেমডের সাথে খারাপভাবে কাজ করে তবে আমরা স্ক্রিপ্ট শুরু করতে সিস্টেমড ব্যবহার করতে পারি, যেমন তারা সরকারী উদাহরণে বলেছিল ।
উদাহরণস্বরূপ, যদি আপনার স্ক্রিপ্টটি দিয়ে শুরু করা হয় /usr/bin/myPythonScript
, আপনি এর মতো সিস্টেমড ইউনিট ফাইল তৈরি করতে পারেন।
$ cat /etc/systemd/system/myPythonScript.service
[Unit]
Description=MyPythonScript
[Service]
ExecStart=/usr/bin/myPythonScript
[Install]
WantedBy=multi-user.target
চেয়ে, আপনি এই স্ক্রিপ্টটি শুরু করতে পারেন
# systemctl daemon-reload
# systemctl start myPythonScript
আপনি যদি এই স্ক্রিপ্টটি সিস্টেমের শুরুতে স্বয়ংক্রিয়ভাবে শুরু করতে চান -
# systemctl enable myPythonScript
যে কোনও সময় আপনি দেখতে পারেন যে কীভাবে আপনার স্ক্রিপ্ট চলছে
# systemctl status myPythonScript
বিজ্ঞাপন আপনি আপনার স্ক্রিপ্ট লগ পর্যালোচনা করতে পারেন
# journalctl -u myPythonScript -e
বেশিরভাগ প্রক্রিয়াগুলি তার স্টাডাউট, স্ট্ডার, স্ট্ডিনকে পুনর্নির্দেশের মাধ্যমে বোকা বানানো যেতে পারে (সমস্ত বর্ণনাকারী পুনরায় পুনর্নির্দেশের জন্য প্রয়োজনীয় নয়) এবং &
নিয়ন্ত্রণ অপারেটর ব্যবহার করে ।
যে ping example.com 1>/dev/null &
কাজ করে দেখুন ।
অবশ্যই, কিছু প্রোগ্রামগুলি আরও পরিশীলিত এবং @terdon হিসাবে উল্লিখিত যেমন সমাধানগুলির প্রয়োজন হয় তবে এটি ভাল এবং কী উপযুক্ত তা জেনে এবং ব্যবহার করা ভাল।
সম্পাদনা: এই উত্তরে লিখিতভাবে systemd
লগআউট করার প্রক্রিয়াগুলিকে হত্যা করে। systemd
ডিফল্টরূপে লগআউটে কিল প্রসেসের কিছু সংস্করণ থাকে , অন্যরা তা করে না। নীচের বিকল্পটি সেট করে /etc/systemd/logind.conf পরিবর্তন করে এই আচরণটি পরিবর্তন করা যেতে পারে। লিখিত হিসাবে, এটি @ টেরডনের সমাধানগুলির সাথে আপনার কিছু সমস্যা সমাধান করতে পারে।
থেকে man logind.conf
:
KillUserProcesses=
একটি বুলিয়ান যুক্তি দেয় T ব্যবহারকারী লগ আউট করার সময় কোনও ব্যবহারকারীর প্রক্রিয়াগুলি হত্যা করা উচিত কিনা তা কনফিগার করে। যদি সত্য হয়, সেশনের সাথে সম্পর্কিত স্কোপ ইউনিট এবং সেই সুযোগের অভ্যন্তরের সমস্ত প্রক্রিয়া সমাপ্ত হবে। মিথ্যা হলে, সুযোগটি "পরিত্যাজ্য", systemd.scope (5) দেখুন এবং প্রক্রিয়াগুলি হত্যা করা হয় না। "হ্যাঁ" এ ডিফল্ট, তবে বিকল্পগুলি
KillOnlyUsers=
এবংKillExcludeUsers=
নীচে দেখুন।সেশন প্রক্রিয়াগুলি ছাড়াও, ব্যবহারকারী প্রক্রিয়া ব্যবহারকারী পরিচালকের ইউনিট ব্যবহারকারী @ .service এর অধীনে চলতে পারে। লম্বা সেটিংসের উপর নির্ভর করে এটি ব্যবহারকারীদের তাদের লগইন সেশনগুলির চেয়ে আলাদা প্রক্রিয়া চালানোর অনুমতি দিতে পারে। বিবরণ দেখুন
enable-linger
মধ্যেloginctl
(1)।নোট করুন যে সেটিংসটি (1) এবং (1) এর
KillUserProcesses=yes
মতো সরঞ্জামগুলি ভেঙে দেবে , যদি না সেগুলি সেশনের সুযোগের বাইরে চলে যায়। (1) উদাহরণ দেখুন ।screen
tmux
systemd-run
আরও জানতে লিঙ্কিত উত্তর পড়ুন।
isatty()
এবং যদি তা না হয় তবে কি প্রস্থান হয়?"
nohup
।