সিস্টেমড সহ প্রতি 30 মিনিটে স্ক্রিপ্ট চালান


20

আমি সিস্টেমটিতে বুট করার পরে প্রতি 30 মিনিটের পরে একটি স্ক্রিপ্ট কার্যকর করতে চাই। আমি জানি আপনি ক্রোন ব্যবহার করতে পারেন তবে আমি এই বৈশিষ্ট্যটি প্রায়শই ব্যবহার করার পরিকল্পনা করি না তাই আমি এটি সিস্টেমড দিয়ে চেষ্টা করতে চাই।

এখনও অবধি আমি কেবল একঘেয়ে টাইমারকে পেয়েছি যা একবার কিছু সম্পাদন করতে দেয় (কমপক্ষে আমি এটি মনে করি)। বুট / সিস্টেম শুরু হওয়ার পরে প্রতি 30 মিনিটে আমি কোনও কিছু সম্পাদন করতে চাইলে foo.timerএবং এর foo@user.serviceচেহারাটি কেমন হবে ?

foo@user.service

[Unit]
Description=run foo
Wants=foo.timer

[Service]
User=%I
Type=simple
ExecStart=/bin/bash /home/user/script.sh

foo.timer

[Unit]
Description=run foo

[Timer]
where I am stuck... ???

উত্তর:


26

আপনাকে দুটি ফাইল তৈরি করতে হবে: একটি পরিষেবার জন্য, অন্যটি একই নামের টাইমারের জন্য।

উদাহরণ:

/etc/systemd/system/test.service

[Unit]
Description=test job

[Service]
Type=oneshot
ExecStart=/bin/bash /tmp/1.sh

/etc/systemd/system/test.timer

[Unit]
Description=test

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target

এর পরে কমান্ডটি ব্যবহার করে সিস্টেমেড পুনরায় লোড করুন systemctl daemon-reloadএবং আপনার টাইমার দ্বারা এটি চালু করুন systemctl start test.timer, বা এগুলি ডিফল্টরূপে সক্ষম করুন।

পরীক্ষার সামগ্রী 1.sh

#!/bin/bash
echo `date` >> /tmp/2

এবং সমস্ত উপলব্ধ টাইমার চেক করার আদেশ: systemctl list-timers --all

প্রকল্প পৃষ্ঠায় আরও বিস্তারিত তথ্য এবং আর্চলিনাক্স পৃষ্ঠায় উদাহরণ


systemd স্ক্রিপ্টগুলি গ্রহণ করে এবং এটি তালিকাভুক্ত করা হয়, তবে কিছুই হচ্ছে না
টমটম

কোনটি? দুটি স্ক্রিপ্ট থাকতে হবে, একটি টাইমার এবং অন্য পরিষেবা। সময়, যখন তাদের মৃত্যুদন্ড কার্যকর করা হয়েছিল তালিকা-টাইমার কমান্ড দ্বারা পরীক্ষা করা যায়, সম্ভাব্য ত্রুটিগুলি systemctl status test.timerএবং systemctl status test.serviceকোমন্ড দ্বারা পরীক্ষা করা যেতে পারে
রিশিন

1
systemctl list-timers --allকমান্ড ব্যবহার করুন এবং আউটপুট পরীক্ষা করুন। তিনি মত হতে হবে এই । ইউনিট, বাম এবং পাশ করা কলামগুলিতে তাকান। যদি টাইমার উপস্থিত থাকে তবে দয়া করে আপনার পরিষেবা ফাইলটি দেখুন এবং টাইমার স্বাভাবিকভাবে কাজ করার কারণে বাগগুলি দেখুন।
রিশিন

1
না, কোজ মূল প্রশ্ন "বিজ্ঞপ্তি-প্রেরণ" সম্পর্কে কিছুই জিজ্ঞাসা করে না এবং আমি মনে করি যে এই জাতীয় বিষয় ইতিমধ্যে উপস্থিত থাকলে আমাদের দুটি আলাদা জিনিস মিশ্রিত করা উচিত নয় । আপনার ক্ষেত্রে, export DISPLAY=:0.0স্ক্রিপ্টে যুক্ত করার চেষ্টা করুন ।
রিশিন

1
PS: ম্যান systemd.timer অনুসারে পার্সেন্ট্যান্ট = সত্য শুধুমাত্র অনক্যালেন্ডার (অর্থাৎ প্রাচীরের ঘড়ি) দিয়ে কনফিগার করাতে প্রভাব ফেলবে
স্নেহ

11

আপনার টাইমারটি ব্যবহার না করেই এখানে অন্য বিকল্প। যদি সময়টি মারাত্মক সমালোচনা না করে এবং স্ক্রিপ্ট দীর্ঘকাল ধরে না চলে তবে সাধারণ জিনিসগুলির জন্য এটি ঠিক।

[Unit]
Description=Run foo

[Service]
User=%I
Restart=always
RestartSec=1800s
ExecStart=/bin/bash /home/user/script.sh

2
আমি এই সমাধানটি পছন্দ করি। একমাত্র বড় অসুবিধা হ'ল আপনি প্রায়শই পুনঃসূচনা (যদি প্রতি 30 সেকেন্ডে) শুরু করেন তবে সিস্টেম লগগুলি "শুরু <সার্ভিস এক্স>" লগগুলি দিয়ে প্লাবিত হবে। সিস্টেমটি থেকে বার বার চালু করার পরিবর্তে ডিমন হিসাবে পরিষেবাটি চালানো ভাল।
জার্সি শিম

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