উবুন্টুতে স্ক্রিপ্টটি চালানোর জন্য কোনও মেশিনিক উপায় কি প্রথমবার কোনও মেশিন বুট করা হয়? (EC2)।
উবুন্টুতে স্ক্রিপ্টটি চালানোর জন্য কোনও মেশিনিক উপায় কি প্রথমবার কোনও মেশিন বুট করা হয়? (EC2)।
উত্তর:
না। তবে আপনি নিজের স্ক্রিপ্টটি এতে রাখতে চান /etc/init.d/script
এবং এটি নিজে মুছতে পারেন:
#!/bin/bash
echo "Bump! I'm your first-boot script."
# Delete me
rm $0
স্ক্রিপ্ট চললে একটি ট্র্যাকিং ফাইল তৈরি করুন। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে স্ক্রিপ্ট থেকে প্রস্থান করুন।
প্রথম দুটি উত্তরগুলির সংমিশ্রণটি ধরে নিয়ে আপনি আপনার স্ক্রিপ্টটির নাম /usr/local/bin/firstboot.sh
রেখেছেন তা শেষ পর্যন্ত রেখে দেওয়া হয়েছে /etc/rc.local
(এই স্ক্রিপ্টগুলি প্রতিটি বুটে চলে) স্ক্রিপ্টগুলি এরকম হয়
#! / বিন / ব্যাশ পতাকা = "প্রথমেই / var / log /? Firstboot.log" যদি [! -f $ FLAG]; তারপর # এখানে আপনার সূচনা বাক্য রাখুন প্রতিধ্বনি "এটি প্রথম বুট" # পরবর্তী লাইনটি একটি খালি ফাইল তৈরি করে যাতে এটি পরবর্তী বুটটি চালায় না স্পর্শ $ FLAG আর প্রতিধ্বনি "কিছুই করবেন না" ফাই
আমি যে ফলাফলগুলি দেখছি তাতে আমি একটি সংজ্ঞায়িত এবং সমর্থিত উবুন্টু "প্রথম বুট" হুক সন্ধানের জন্য অবাক হয়েছি। দেখে মনে হচ্ছে রেড হ্যাট / ফেডোরা / সেন্টোস ভিড় এক দশক ধরে এটি পেরেক করেছে। নিকটতম উবুন্টু সমতুল্য oem-config-firstboot বলে মনে হচ্ছে ।
কেবল একটি rm $0
উইল সম্পাদন করার ধারণাটি কাজ করবে। তবে, প্রযুক্তিগতভাবে কিছু আকর্ষণীয় শব্দার্থক জড়িত রয়েছে। ইউনিক্সের অধীনে বেশিরভাগ অন্যান্য স্ক্রিপ্ট দোভাষীদের থেকে পৃথক শেল স্ক্রিপ্ট একবারে একটি লাইন / বিবৃতি পড়ে এবং প্রক্রিয়া করা হয়। যদি আপনি এর (লিঙ্ক rm
) এর নীচে থেকে লিঙ্কটি সরিয়ে ফেলে থাকেন তবে সেই স্ক্রিপ্টটি প্রক্রিয়া করছে এমন শেলটির উদাহরণটি এখন একটি বেনামে ফাইল (খোলা তবে লিঙ্কযুক্ত নয় এমন কোনও ফাইল) নিয়ে কাজ করছে।
এর মতো একটি ফাইল বিবেচনা করুন:
#!/bin/bash
rm $0
echo "I've removed myself: $0"
ls -l $0
cat <<COMMENTARY
This is a test.
I'm still here, because the "here" doc is being fed to 'cat'
via the anonymous file through the open file descriptor.
But I cannot be re-exec'd
COMMENTARY
exec $0
যদি আপনি সেটিকে কিছু rmself.sh
(এবং শক্ত) লিঙ্কে সংরক্ষণ করেন tst
তবে এর সাথে চালানো ./tst
কোনও কিছু আউটপুট হিসাবে প্রদর্শন করা উচিত:
$ ./tst
I've removed myself: ./tst
ls: ./tst: No such file or directory
This is a test.
I'm still here, because the "here" doc is being fed to 'cat'
via the anonymous file through the open file descriptor.
But I cannot be re-exec'd
./tst: line 11: /home/jimd/bin/tst: No such file or directory
./tst: line 11: exec: /home/jimd/bin/tst: cannot execute: No such file or directory
এখন সিমলিংকের ক্ষেত্রে এমন কয়েকটি বিশ্রী সম্ভাব্য কোণার মামলা রয়েছে এবং সেই ক্ষেত্রে যেখানে স্ক্রিপ্টটি খালি নাম হিসাবে ডাকা হয়েছিল ( $PATH
স্ক্রিপ্টটির সন্ধানে শেলকে বাধ্য করা হয়েছিল) ।
তবে মনে হয় bash
(অন্তত ৩.২ সংস্করণে) $0
যদি পথটি অনুসন্ধান করে এবং অন্যথায় স্ক্রিপ্টের জন্য যে কোনও আপেক্ষিক বা নিখুঁত পাথ ব্যবহার করা হত সেটির জন্য $ 0 সেট ছেড়ে দিলে পথটি প্রস্তুত হয়। এটি কোনও স্বাভাবিকীকরণ বা রেজোলিউশন সম্পর্কিত আপেক্ষিক পাথ বা সিমলিঙ্কগুলি করে বলে মনে হচ্ছে না।
সম্ভবত উবুন্টুর সবচেয়ে পরিষ্কার "ফার্স্ট বুট" হ'ল একটি স্ক্রিপ্ট যুক্ত একটি ছোট প্যাকেজ (.deb) তৈরি করা হবে /etc/init.d/firstboot
এবং একটি ইনস্টল-পরবর্তী স্ক্রিপ্ট যা update-rc.d
এটি রানলেভেল 1 ( /etc/rc1.d
) এর সাথে লিঙ্ক করতে ব্যবহার করবে (যেমন একটি কমান্ড ব্যবহার করে update-rc.d firstboot defaults
:)। .. এবং তারপরে শেষ লাইনে একটি নিষ্ক্রিয়তা সম্পাদন করতে হবে বা এর মতো কিছু ব্যবহার করে মুছুন:update-rc.d firstboot disable
এখানে দেবিয়ান আপডেট-আরসি.ডি হাউটো- র একটি লিঙ্ক
প্রশ্নটি ছিল ইসি 2 এর প্রথম বুটে স্ক্রিপ্ট চালানোর বিষয়ে। আপনি cloud-init
এই উদ্দেশ্যে ব্যবহার করতে পারেন ।
একটি নতুন ইসি 2 উদাহরণ চালু করার সময় আপনার User data
নীচে সংজ্ঞা দেওয়ার বিকল্প রয়েছে Advanced datails
। আপনি যদি cloud-init
স্ক্রিপ্টটি সেখানে রাখেন তবে এটি কেবল প্রথম বুটে কার্যকর হবে।
উদাহরণস্বরূপ আপনি নিম্নলিখিতটি স্থাপন করতে পারেন User data
:
#cloud-config
runcmd:
- /usr/bin/command1.sh
- /usr/bin/command2.sh
আউটপুট লিখিত হবে /var/log/cloud-init-output.log
Cloud-init
এর থেকেও অনেক বেশি কিছু করতে পারে। এটি বিশেষত মেঘের দৃষ্টান্তগুলির প্রাথমিক শুরু করার জন্য ডিজাইন করা হয়েছে। ডক্স এখানে দেখুন: http://cloudinit.readthedocs.io/en/latest/index.html
$0
বাশ-নির্দিষ্ট (সংস্করণ> = 3)। সামঞ্জস্যের উদ্দেশ্যে আপনি এর পরিবর্তে স্ক্রিপ্ট ফাইলের নাম সরবরাহ করতে পারেন, এটি কম জেনারিক করে:rm /etc/init.d/script