প্রারম্ভকালে পাইথন স্ক্রিপ্ট চালানো


29

এই প্রশ্নটি বেশ কয়েকবার আগে জিজ্ঞাসা করা হয়েছিল তবে বিদ্যমান তথ্য ব্যবহার করে এটি কাজ করে বলে মনে হয় না।

আমার পাই রান্পবিয়ান চালায়। আমার কাছে dnscheck.py নামে একটি পাইথন স্ক্রিপ্ট রয়েছে যা চিরকালের জন্য লুপ হয়ে যায়।

বুট চালানোর জন্য আমার এটি দরকার আমি জানি যে আমাকে একটি .sh ফাইল তৈরি করতে হবে যাতে এরকম কিছু থাকে

sudo python dnscheck.py &

আমি যা জানি না তা হ'ল এই ফাইলটি কোথায় হওয়া উচিত বা এটিতে অন্য কিছু থাকা উচিত। আমি init.d ফোল্ডারটি সম্পর্কে জানি তবে কঙ্কালের উদাহরণটি দেখে আমি কল্পনা করি যে এই সাধারণ কাজটি করার একটি সহজ উপায় থাকা উচিত।


আসল সহজ উপায়ের জন্য এই পদক্ষেপটি ধাপে ধাপে টিউটোরিয়াল -> youtu.be/Tvnrx-2QaUU আপনার যতটা প্রবর্তক প্রয়োজন ততগুলি তৈরি করুন এবং সেগুলি ক্রোনটবে প্রবেশ করুন
হোসেইন আরএম

উত্তর:


20

আপনি যদি কঙ্কাল স্ক্রিপ্ট ব্যবহার করে স্টার্ট, স্টপ, পুনঃসূচনা ইত্যাদি কমান্ড দিয়ে প্রক্রিয়াটি নিয়ন্ত্রণ করতে চান এবং আপনার উদ্দেশ্যে এটি পরিবর্তন করা সর্বোত্তম বিকল্প হতে পারে।

আপনি যদি কেবল প্রক্রিয়াটি শুরু করতে চান তবে কমান্ডটি প্রবেশ করুন /etc/rc.local। (আমার আরপিআই হাতে নেই, তবে আমি অনলাইনে পড়েছি যে সেখানে একটি 'প্রস্থান 0' লাইন রয়েছে, আপনার এই আদেশটি এই লাইনের উপরে দেওয়া উচিত)


1
এটা কাজ করেছে! আমাকে অবশ্যই যুক্ত করতে হবে যে স্ক্রিপ্টের জন্য অনুমতিগুলি নির্ধারণ করা উচিত এবং rc.local 755 এ ফিরে আসুন (পড়ুন / লিখুন / সম্পাদন করুন) আবশ্যক। দু'জনেরই এই সেটিংয়ের প্রয়োজন কিনা তা নিশ্চিত নয়, তবে এটি আমার পক্ষে কাজ করেছিল। সহযোগিতার জন্য অসংখ্য ধন্যবাদ!
ভ্লাদ শ্নাকোভস্কি

7
"আপনি আপনার প্রশ্নে এটি লিখেছেন" বেশ নয় - rc.localরান রুট হিসাবে আপনার সুডোর দরকার নেই । আপনার অবশ্যই স্ক্রিপ্টের সম্পূর্ণ পথ নির্দিষ্ট করা উচিত। আপনার শেষেও যুক্ত& করা উচিত যাতে স্ক্রিপ্টটি কাঁটাচামচ, যেমন /path/to/foobar.py &
স্বর্ণিলকস

1
@ গোল্ডিলোকস আপনি কি দয়া করে ব্যাখ্যা করতে পারেন আমাকে কেন যুক্ত করার দরকার আছে &? কারণ যখন আমি এটি ব্যবহার না করি, তখনও সবকিছু প্রত্যাশা অনুযায়ী কাজ করে।
Huy.PhamNhu

2
@ হুই.প্যামনহু আপনার প্রশ্নের জবাব দিচ্ছেন: পাই এই প্রোগ্রামটি বুটআপে চালাবে এবং অন্যান্য পরিষেবা শুরু হওয়ার আগে। আপনি যদি অ্যাম্পারস্যান্ড অন্তর্ভুক্ত না করেন এবং আপনার প্রোগ্রামটি যদি অবিচ্ছিন্নভাবে চলতে থাকে তবে পাই তার বুট প্রক্রিয়াটি সম্পূর্ণ করবে না। অ্যাম্পারস্যান্ড কমান্ডকে একটি পৃথক প্রক্রিয়াতে চালিত হতে এবং মূল প্রক্রিয়াটি চালিয়ে চালিয়ে যাওয়া চালিয়ে যাওয়ার অনুমতি দেয়।
আমিন হরবাউই

6

আপনার স্ক্রিপ্টটি সরান (আমরা এটি ফাইলটিতে সংরক্ষণ করব dnscheck) /etc/init.d/এবং অনুমতিগুলি সেট করুন যাতে এটি চালানো যায়:

chmod 755 /etc/init.d/dnscheck

আপনার স্ক্রিপ্টের শীর্ষে এলএসবি init ট্যাগ যুক্ত করুন । আপনি সম্ভবত আপনার স্ক্রিপ্ট ফিট করতে প্রয়োজনীয়-স্টার্ট / স্টপ এবং বিবরণ ট্যাগ পরিবর্তন করতে চাইবেন want

### BEGIN INIT INFO
# Provides:          dnscheck
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

তারপরে দৌড় দ্বারা প্রতীকী লিঙ্কগুলি তৈরি করুন

update-rc.d /etc/init.d/dnscheck defaults

2
দয়া করে মনে রাখবেন না যে 3/2 বছর আগে এটি একটি শালীন উত্তর ছিল, এবং এখনও কাজ করবে কারণ রাস্প্বিয়ান এর নতুন আরম্ভ সিস্টেমটি এলএসবি / সিসভি স্টাইল স্ক্রিপ্টগুলির সাথে পশ্চাদপটে সামঞ্জস্যপূর্ণ, নতুন ব্যবহারকারী পরিবর্তে নতুন সিস্টেমটি ব্যবহার করা শিখতে ভাল হবে ( systemd ) যদি কেবল একটি লাইন যোগ /etc/rc.localকরা অপর্যাপ্ত হয়।
স্বর্ণলোকস

3

এটি করার বিভিন্ন উপায় অবশ্যই রয়েছে তবে ব্যবহারটি ভুলে যাবেন না cron। আপনি যদি @rebootআপনার ক্রন্টবায় একটি লাইন রাখেন তবে প্রতিটি কমান্ডটি পুনরায় আরম্ভ করার সময় কার্যকর করা হবে।

পরীক্ষা করার জন্য, আমি এইটি দিয়ে আমার ব্যবহারকারী ক্রোন্টাবের সাথে কেবল নীচের লাইনটি যুক্ত করেছি crontab -e: @reboot echo "$(date)" >> ~/boot.txt এই পদ্ধতির বোনাসটি হ'ল আপনি বুট সময় ছাড়াও অন্যান্য বিরতিতে যেমন প্রয়োজন তেমন কল করতে পারেন, এবং আপনাকে আরআইডি স্ক্রিপ্টগুলি সম্পাদনা করতে হবে না।


3

আপনি যদি rc.local ফাইল ব্যবহার করেন তবে এটি সমস্যা সমাধানের জন্য সহায়ক হতে পারে। লগ ত্রুটিগুলিতে লগিং লাইন যুক্ত করতে পারেন (stderr) এবং লগ ফাইলটিতে কমান্ড আউটপুট (stdout)। এই উদাহরণ অনুসারে সেই ফাইলটি /tmp/rc.local.log এ সংরক্ষণ করে

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exec 2> /tmp/rc.local.log      # send stderr from rc.local to a log file
exec 1>&2                      # send stdout to the same log file

# Your other commands...

exit 0

আরও পড়ুন


3

আমি সত্যিই অবাক হয়েছি ডিজেবির ডেমনটোলগুলি এখানে উল্লেখ করা হয়নি। ডিমনটোলস যথাযথ প্রক্রিয়া তদারকি করে এবং আপনি স্বয়ংক্রিয়ভাবে ঘোরানো লগিংয়ের মতো দুর্দান্ত বৈশিষ্ট্যগুলি যুক্ত করতে পারেন। টিএল; ডিআর আপনি যদি এগুলির কোনওটির সাথে পরিচিত না হন তবে আপনার পাইটি চালু হওয়ার সাথে সাথে আপনার প্রক্রিয়াটি প্রতিবার ব্যর্থ হবে এবং স্বয়ংক্রিয়ভাবে শুরু হবে। এটি দুর্দান্ত যদি আপনি একটি অজগর প্রোগ্রাম লিখে থাকেন যাতে ব্যর্থতা মোড রয়েছে তবে আপনি কোনও ত্রুটি দেখা দিলে এটি মারা যেতে চান না।

ইনস্টল করুন:

ডেডমোনটুলস-রান ইনস্টল করুন sudo অ্যাপ্লিকেশন

তারপরে ডিমনাইজড প্রক্রিয়াগুলি তৈরি করতে পদক্ষেপগুলি অনুসরণ করুন:

এটি অন্য পার্কে runস্ক্রিপ্ট অনুলিপি করার মতোই সহজ /etc/service/<my_custom_service_name>: আপনি যে কোনও ব্যবহারকারী বা রুট হিসাবে চালাতে পারেন! লিঙ্কে বিশদ।

FWIW আমার একটি পাই প্রকল্প ছিল যেখানে আমার 3 টি পৃথক পাইথন প্রক্রিয়া ছিল (প্রতিটি সিপিইউ সময় ব্যবহার করে একটি এক্সিকিউশন লুপ ছিল তাই 3 টি প্রক্রিয়া ব্যবহার করে আমি প্রতিটি প্রক্রিয়া 1 সিপিইউ কোর উত্সাহিত করতে দিয়েছি)। ডেমোনটুলস আমাকে পাইটি প্লাগ ইন করার পরে সমস্ত 3 টি স্বয়ংক্রিয়ভাবে চলতে এবং চলতে থাকবে তা নিশ্চিত করার অনুমতি দেয়।


সহজ এবং সহজ সমাধান, আপনি উত্তর অনেকটা সময় সাশ্রয় করেছেন, ধন্যবাদ ..
শিবগুন্টুকু

2

এই সমাধানটি আমি প্রতিনিয়ত ব্যবহার করি।

একটি ডেস্কটপ ফাইল তৈরি করুন

xyz.desktop

এটিতে নিম্নলিখিত টাইপ করুন

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=<Application Name Goes here>
Comment=
Exec=  python /home/pi/Desktop/execute_on_boot.py
StartupNotify=false
Terminal=true
Hidden=false

এই ফাইলটি পেস্ট করুন

/home/pi/.config/autostart/

এবং আপনার রাস্পবেরি পাই পুনরায় আরম্ভ করুন এবং এটি স্বয়ংক্রিয়ভাবে একটি নতুন টার্মিনালে আপনার প্রোগ্রামটি চালানো উচিত


দয়া করে একাধিক প্রশ্নের উত্তর কেটে পেস্ট করবেন না। উত্তরটি যদি একই হয় তবে নতুন সংস্করণটি সদৃশ হিসাবে পতাকাঙ্কিত করা উচিত।
স্টিভ রবিলার্ড

আমি কেবল এটিই করিনি কারণ এই পৃষ্ঠার অপরটির বিপরীতে বিপুল সংখ্যক দর্শন ছিল।
evolutionizer

@ স্টিভরবিলার্ড আমিও মনে করি না যে এটি করার জন্য আমার কাছে প্রয়োজনীয় প্রতিনিধি আছে
বিবর্তনকারী

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

@ স্টেভরবিলার্ড এই তথ্যের জন্য ধন্যবাদ এবং আমার অজ্ঞতা ক্ষমা করুন। আমি সেখানে পূর্ববর্তী প্রশ্নের সদৃশ হিসাবে পতাকাঙ্কিত করেছি।
evolutionizer

2

একটি .py ফাইল ব্যবহার করতে, কেবল #!/usr/bin/pythonআপনার ফাইলের শুরুতে লাইনটি রাখুন । তারপর এটা দিয়ে এক্সিকিউটেবল করতে chmod +x filename। এর পরে, লাইন যোগ /path/to/file.py &করতে /etc/rc.localসামনে exit 0লাইন (সোয়াপিং /path/to/file.pyআপনার স্ক্রিপ্টের পাথ সহ)। এটি আপনার অজগর স্ক্রিপ্টটি বুটের শেষে কার্যকর করবে।


0

এখানে একটি আরও সহজ পদ্ধতি যা আমার পক্ষে কাজ করেছিল। LXDE এ অটোস্টার্টটি পরিবর্তন করুন।

একটি টার্মিনাল খুলুন এবং অটোস্টার্ট ফাইলটি নিম্নরূপে সম্পাদনা করুন:

sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

নীচে নীচের পাঠ্যটির লাইন যুক্ত করুন (যেখানে আপনার example.py অবস্থিত সেখানে প্রয়োজন অনুসারে পথটি সংশোধন করুন)

@/usr/bin/python /home/pi/example.py

সিটিআর-এক্স, এবং সংরক্ষণ করুন। আপনাকে পাইথন স্ক্রিপ্টটি নিম্নলিখিত হিসাবে কার্যকর করতে হবে:

sudo chmod +x /home/pi/example.py

রেফারেন্সের LXDE মধ্যে স্বতঃসূচনা এবং জন্য রেফারেন্স তৈরীর পাইথন এক্সিকিউটেবল জন্য


মনে রাখবেন যে আপনি কোনও গুইতে শুরু না করলে এটি কাজ করবে না (উদা: আপনার পিআই হেডলেস চালান)
হাভনার

0

এই সমাধানগুলি ফেহ চলমান দিয়ে অজগর স্ক্রিপ্ট শুরু করার চেষ্টা করে আমার পক্ষে কাজ করে নি। নিম্নলিখিত কাজ করে। এটি লগইনের পরে একটি স্ক্রিপ্ট শুরু করে।

একটি টার্মিনাল সেশনটি খুলুন এবং ফাইলটি সম্পাদনা করুন

sudo nano /etc/profile

ফাইলের শেষে নিম্নলিখিত লাইনটি যুক্ত করুন

/home/pi/your_script_name.sh

আপনার স্টার্ট-আপ স্ক্রিপ্টের সঠিক নাম এবং পাথের সাথে স্ক্রিপ্টের নাম এবং পাথটি প্রতিস্থাপন করুন। সংরক্ষণ করুন এবং প্রস্থান

ফাইলটি সংরক্ষণ করতে ন্যানো সম্পাদক থেকে বেরিয়ে আসতে Ctrl + X টিপুন Y

এখানে আমার স্ক্রিপ্ট.শ দেখতে কেমন:

#!/bin/sh
cd /
cd home/pi/
sudo python your_python_sript.py &
exit 0
cd /

আমি মনে করি আমি chmod ব্যবহার করে স্ক্রিপ্ট.শ এবং স্ক্রিপ্ট.পি উভয়ই সম্পাদনযোগ্য করে রেখেছি

sudo chmod +x home/pi/your_script_name.sh
sudo chmod +x home/pi/your_python_script.py
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.