খুব প্রথম বুটে স্ক্রিপ্ট চালান


উত্তর:


14

না। তবে আপনি নিজের স্ক্রিপ্টটি এতে রাখতে চান /etc/init.d/scriptএবং এটি নিজে মুছতে পারেন:

#!/bin/bash

echo "Bump! I'm your first-boot script."

# Delete me
rm $0

দয়া করে নোট করুন, $0বাশ-নির্দিষ্ট (সংস্করণ> = 3)। সামঞ্জস্যের উদ্দেশ্যে আপনি এর পরিবর্তে স্ক্রিপ্ট ফাইলের নাম সরবরাহ করতে পারেন, এটি কম জেনারিক করে:rm /etc/init.d/script
আন্দ্রেজস ক্যানিকভস

4
$ 0 বাশ নির্দিষ্ট নয় এবং এটি ব্যাশ ৩.x এর চেয়ে অনেক বেশি সময় ধরে সমর্থনযোগ্য (এবং এটি বোর্ন, কর্ন, জেডএস এবং অন্যান্যগুলিতে সমর্থিত)। স্টিকিং পয়েন্টটি হ'ল $ 0 একটি পূর্ণ বা আপেক্ষিক পাথ স্পেসিফিকেশন ধারণ করে। আপনার যদি প্রয়োজন হয় তবে পুরো পথটি পাওয়ার একটি নির্ভরযোগ্য উপায়ের
জিম ডেনিস

7

স্ক্রিপ্ট চললে একটি ট্র্যাকিং ফাইল তৈরি করুন। যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে স্ক্রিপ্ট থেকে প্রস্থান করুন।


4
এটি প্রথম নজরে যেমন মনে হচ্ছে না, তবুও স্ক্রিপ্টটি মুছে ফেলার চেয়ে এটি আরও ভাল সমাধান হতে পারে কারণ এটি পুনরায় ট্রিগার করার সম্ভাবনাটি ধরে রাখে, যদি আপনি কখনও চান।
মিসানফোর্ড

7

প্রথম দুটি উত্তরগুলির সংমিশ্রণটি ধরে নিয়ে আপনি আপনার স্ক্রিপ্টটির নাম /usr/local/bin/firstboot.shরেখেছেন তা শেষ পর্যন্ত রেখে দেওয়া হয়েছে /etc/rc.local(এই স্ক্রিপ্টগুলি প্রতিটি বুটে চলে) স্ক্রিপ্টগুলি এরকম হয়

#! / বিন / ব্যাশ

পতাকা = "প্রথমেই / var / log /? Firstboot.log"
যদি [! -f $ FLAG]; তারপর
   # এখানে আপনার সূচনা বাক্য রাখুন
   প্রতিধ্বনি "এটি প্রথম বুট"

   # পরবর্তী লাইনটি একটি খালি ফাইল তৈরি করে যাতে এটি পরবর্তী বুটটি চালায় না
   স্পর্শ $ FLAG
আর
   প্রতিধ্বনি "কিছুই করবেন না"
ফাই

এটি অগত্যা সিস্টেমেটেড নিয়ে কাজ করছে না। এটি শেষ স্ক্রিপ্টটি চালানো হয়েছে তা নিশ্চিত করার জন্য আমাকে একটি 20 টি সংযুক্ত করা দরকার।
মুরসি

আপনি যদি এটির নাম রাখেন /etc/rc.local/99-firstboot.sh এটি শেষ হওয়া উচিত run
জনডাভিড

3

আমি যে ফলাফলগুলি দেখছি তাতে আমি একটি সংজ্ঞায়িত এবং সমর্থিত উবুন্টু "প্রথম বুট" হুক সন্ধানের জন্য অবাক হয়েছি। দেখে মনে হচ্ছে রেড হ্যাট / ফেডোরা / সেন্টোস ভিড় এক দশক ধরে এটি পেরেক করেছে। নিকটতম উবুন্টু সমতুল্য 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

এখানে দেবিয়ান আপডেট-আরসি.ডি হাউটো- র একটি লিঙ্ক


0

আপনি বর্তমান rc.local কে rc.local.bak এ ব্যাকআপ করতে পারেন

তারপরে আপনি যে জিনিসগুলি করতে চান তা rc.local এ এবং শেষে mv /etc/rc.loca.bak /etc/rc.local রাখতে পারেন।


0

প্রশ্নটি ছিল ইসি 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

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