আমি সিস্টেমড ব্যবহার করে কীভাবে একটি একক কমান্ড চালাব?


112

আমি নিম্নলিখিত কমান্ডটি ব্যবহার করে বুটের পরে একটি অ্যাপাচি স্পার্ক ক্লাস্টার শুরু করতে চাই:

sudo ./path/to/spark/sbin/start-all.sh

তারপরে সিস্টেমটি পুনরায় বুট / শাটডাউন করার জন্য প্রস্তুত হলে এই কমান্ডটি চালান:

sudo ./path/to/spark/sbin/stop-all.sh

আমি কীভাবে শুরু করব? আমি কি তৈরি করতে পারি এমন কোনও প্রাথমিক টেম্পলেট আছে?

আমি একটি অত্যন্ত সহজ (ফাইল /lib/systemd/system/spark.service:) ব্যবহার করার চেষ্টা করেছি :

[Unit]
Description=Spark service

[Service]
ExecStart=sudo ./path/to/spark/sbin/start-all.sh

যা কাজ করে না।



হাই @ উইলিমকে, আমি এই পৃষ্ঠাটি ইতিমধ্যে দেখেছি। এই সমস্যা আমি দেখেছি আমি শুধু প্রতিস্থাপন করতে পারবেন না হয় execসঙ্গে ExecStart=। প্লাস, আমি এর আগে আপস্টার্ট ব্যবহার করি নি।
macourtney7

1
আপনার স্ক্রিপ্টের পথের আগে বিন্দুটি অত্যন্ত সন্দেহজনক দেখাচ্ছে।
আন্ড্রেয়া লাজারোত্তো

@ আন্ড্রেলাজারোত্তো আমার ধারণা ওপি টার্মিনালে ওপি যেমনভাবে স্ক্রিপ্টটি চালানোর চেষ্টা করছেন ....
জর্জ উডোসেন

হাই @ আন্দ্রেয়া লাজারোত্তো, এটি সঠিক। যে কোনও বিভ্রান্তির জন্য ক্ষমা চাইছি।
macourtney7

উত্তর:


141

আপনার .serviceফাইলটি দেখতে এমন হওয়া উচিত:

[Unit]
Description=Spark service

[Service]
ExecStart=/path/to/spark/sbin/start-all.sh

[Install]
WantedBy=multi-user.target

.serviceফাইলটি সক্ষম এবং ব্যবহারের জন্য আরও কয়েকটি পদক্ষেপ করুন:

  1. /lib/systemd/systemনাম বলার সাথে এটি ফোল্ডারে রাখুনmyfirst.service

  2. এটির সাথে আপনার স্ক্রিপ্টটি কার্যকরযোগ্য করুন:

    chmod u+x /path/to/spark/sbin/start-all.sh
    
  3. এটি শুরু করুন:

    sudo systemctl start myfirst
    
  4. এটি বুটে চালাতে সক্ষম করুন:

    sudo systemctl enable myfirst
    
  5. বন্ধ কর:

    sudo systemctl stop myfirst
    

নোট:

  1. ডিফল্ট পরিষেবা ব্যবহারকারী ইতিমধ্যে রুট হিসাবে আপনাকে আপনার পরিষেবাদিতে সুডো সহ স্পার্ক চালু করতে হবে না।

  2. আরও systemdবিকল্পের জন্য নীচের লিঙ্কগুলিতে দেখুন ।

হালনাগাদ

এখন আমাদের উপরে যা আছে তা কেবলমাত্র প্রাথমিক, এখানে স্পার্কির সম্পূর্ণ সেটআপ রয়েছে:

[Unit]
Description=Apache Spark Master and Slave Servers
After=network.target
After=systemd-user-sessions.service
After=network-online.target

[Service]
User=spark
Type=forking
ExecStart=/opt/spark-1.6.1-bin-hadoop2.6/sbin/start-all.sh
ExecStop=/opt/spark-1.6.1-bin-hadoop2.6/sbin/stop-all.sh
TimeoutSec=30
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10

[Install]
WantedBy=multi-user.target

পরিষেবাটি সেটআপ করতে:

sudo systemctl start spark.service
sudo systemctl stop spark.service
sudo systemctl enable spark.service

আরও পড়া

নিম্নলিখিত লিঙ্কের মাধ্যমে পড়ুন দয়া করে। স্পার্ক একটি জটিল সেটআপ, সুতরাং এটি কীভাবে উবুন্টুর আরম্ভ পরিষেবাটির সাথে সংহত হয় তা আপনার বুঝতে হবে।

https://datasciencenovice.wordpress.com/2016/11/30/spark-stand-alone-cluster-as-a-systemd-service-ubuntu-16-04centos-7/

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

https://www.freedesktop.org/software/systemd/man/systemd.unit.html



1
এর জন্য ধন্যবাদ, আমি আপনার পরামর্শ অনুসারে একটি ফাইল তৈরি করেছি। রান করার পরে sudo systemctl start sparkনিম্নলিখিত ত্রুটিটি পাওয়া যায়:Failed to start spark.service: Unit spark.service is not loaded properly: Invalid argument. See system logs and 'systemctl status spark.service' for details.
ম্যাকর্টনে 7

এর মূল অংশটি systemctl status spark.serviceনিম্নরূপ: Executable path is not absoluteএবংspark.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.
macourtney7

সমস্যাগুলি হল 1) স্পার্ক বাইনারি পাথ (আমাদের সার্ভিস ফাইলে যা আছে তা প্রতিস্থাপন করা উচিত), 2) স্পার্কের শট ডাউন কমান্ড এটি কী। 3) আমি আপনাকে যে লিঙ্কগুলি দিয়েছি তা পেরেছেন? আমি স্পার্ক ব্যবহার করি না তাই তাদের সরবরাহ করুন
জর্জ উদোসেন

@ জর্জিউডোসেন আপনার উত্তরের জন্য ধন্যবাদ, আমার প্রশ্ন হল আমি কীভাবে রিবুট করার পরে একটি নির্দিষ্ট কমান্ডের অধীনে স্পার্ক চালাতে পারি? প্রশ্নটি এখানে জিজ্ঞাসা করা হয়েছে জিজ্ঞাসাবাবু
সোহেল পৌরবাফরানী

2

এটি /root/boot.shএকটি সর্বনিম্ন পরিষেবা ফাইল ব্যবহার করে বুটটিতে (রুট হিসাবে) তৈরি করে এবং চালায় :

bootscript=/root/boot.sh
servicename=customboot

cat > $bootscript <<EOF
#!/usr/bin/env bash
echo "$bootscript ran at $(date)!" > /tmp/it-works
EOF

chmod +x $bootscript

cat > /etc/systemd/system/$servicename.service <<EOF
[Service]
ExecStart=$bootscript
[Install]
WantedBy=default.target
EOF

systemctl enable $servicename

আপনি Ctrl+ + Cএকটি রুট টার্মিনাল এই।

প্যারামিটারগুলি পরিবর্তন করতে, উদাহরণস্বরূপ কোনও আলাদা ব্যবহার করার জন্য $bootscript, সেই পরিবর্তনশীলটি ম্যানুয়ালি সেট করুন এবং কমান্ডগুলি অনুলিপি করার সময় সেই লাইনটি এড়িয়ে যান।

কমান্ডগুলি চালনার পরে, আপনি আপনার প্রিয় সম্পাদক ব্যবহার করে বুট স্ক্রিপ্টটি সম্পাদনা করতে পারেন এবং এটি পরবর্তী বুটে চলবে on আপনি এটি ব্যবহার করে অবিলম্বে এটি চালাতে পারেন:

systemctl start $servicename

প্রতিটি পদক্ষেপ সুডো দিয়ে করা যেতে পারে তবে এটি কিছুটা জটিল and অতএব আমি উদাহরণে সুডো অন্তর্ভুক্ত না করা বেছে নিয়েছি।


আমি সিস্টেমড ডক্স দ্বারা কিছুটা বিভ্রান্ত হয়ে পড়েছি, তবে Type=oneshot RemainAfterExit=yesকাস্টম স্ক্রিপ্টটি কিছু প্রক্রিয়া চালিত না হওয়া পর্যন্ত এটি হওয়া উচিত নয় বা সিস্টেমড টাস্কটিকে নিষ্ক্রিয় মনে করবে।
পিটার ল্যামবার্গ

@ পিটারল্যামবার্গ আমি সিস্টেমেড ডকসও পড়ার চেষ্টা করেছি এবং এখনও আমরা দুজনেই এখানে রয়েছি;)। আমি মনে করি সেগুলি খুব পরিষ্কার ছিল না, তবে আমি পোস্ট করা উত্তরটি আমার পক্ষে একাধিক সিস্টেমে কাজ করে (আমি এখনই এই পৃষ্ঠাটি পুনরায় দেখি এবং তারপরে যখন আমার আবার প্রয়োজন হয়)। আপনার অর্থ কি, কারণ এটি 'নিষ্ক্রিয়' বলে মনে করা হচ্ছে, প্রতিটি ক্রমান্বয়ে 'শুরু' কল স্ক্রিপ্টটি আবার চালাবে? কারণ আমি শেল স্ক্রিপ্টের জন্য প্রত্যাশিত হিসাবে এটি বিবেচনা করব। আমি এটি অদ্ভুত দেখতে পেয়েছি যদি এমন কিছু 'থামাতে' হয় যা আসলে আবার চালু করার আগে চালিত হয় না।
লুক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.