ক্রোন দ্বারা আবার শুরু না হওয়া পর্যন্ত কোনও নির্দিষ্ট সময়ে কোনও স্ক্রিপ্ট কীভাবে থামানো যায়?


12

আমার একটি রাস্পবেরি পাই চলছে ওএসএমসি (ডেবিয়ান ভিত্তিক)।

মধ্যরাতে স্ক্রিপ্ট, sync.sh শুরু করার জন্য আমি ক্রোন জব সেট করেছি।

0 0 * * * /usr/local/bin sync.sh

আমার স্ক্রিপ্টটি সকাল 7 টায় থামানো দরকার। বর্তমানে আমি ব্যবহার করছি:

0 7 * * * shutdown -r now

একটি ভাল উপায় আছে কি? আমার মনে হচ্ছে রিবুট করা ওভারকিল।

ধন্যবাদ

উত্তর:


25

আপনি এটি timeoutকমান্ড দিয়ে চালাতে পারেন ,

timeout - run a command with a time limit

Synopsis
timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
timeout [OPTION]
Description

Start COMMAND, and kill it if still running after NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. 

পুনশ্চ. যদি আপনার সিঙ্ক প্রক্রিয়াটি খুব বেশি সময় নেয় তবে আপনি আপনার ডেটা সিঙ্ক করার জন্য আলাদা পদ্ধতির বিষয়টি বিবেচনা করতে পারেন, সম্ভবত অনুলিপিটিকে ব্লক করুন।


আমার ইন্টারনেট সংযোগটি ধীরে ধীরে তাই সিঙ্ক করতে এত বেশি সময় নেয় কেন। আপনি কোন বিশেষ সংকেত সুপারিশ করবেন?
অ্যান্থনি

@ অ্যান্টনি আপনি এখনই কীভাবে সিঙ্ক করবেন?
রবিন


আরও সুনির্দিষ্টভাবে: gist.github.com/feralhosting/4e7e93a7fecd8f55cb4a
অ্যান্টনি

@ অ্যান্টনি আপনি অন্যান্য অ্যাপ্লিকেশন যেমন সিঙ্কিং ( sync थान. net ) বা বিটিএসসিঙ্ক ( রেজিলিও ডট কম ) চেষ্টা করতে পারেন , যা ফাইলের ব্লক স্তরের সিঙ্ক করতে কাজ করে
রবিন

9

যদি আপনার সিঙ্কটি হাইবারনেশনের 17 ঘন্টা পরে সহজেই চালিয়ে যেতে পারে তবে চেষ্টা করুন

0 0 * * * killall -CONT -g sync.sh || /usr/local/bin/sync.sh
7 0 * * * killall -STOP -g sync.sh

যদি আপনার সিঙ্কটি শুরু থেকে পুনরায় আরম্ভ করতে পছন্দ করে, তবে চেষ্টা করুন

0 0 * * * exec /usr/local/bin/sync.sh
7 0 * * * killall -TERM -g sync.sh

যদি আপনার সিঙ্ক বা এর সাবটাস্কগুলি সিগন্যালগুলি উপেক্ষা করে তবে কোনও ধ্বংসাবশেষ ছেড়ে না যায় তবে এটি তৈরি করুন

0 0 * * * exec /usr/local/bin/sync.sh
7 0 * * * killall -KILL -g sync.sh

killallpsmisc


আমি নীচে পাওয়া স্ক্রিপ্টটি ব্যবহার করছি, আয়নার সাথে - এটি পুনরায় আরম্ভ করার মনে হবে না। উপরের কোনটি আপনি সুপারিশ করবেন ?: gist.github.com/feralhosting/4e7e93a7fecd8f55cb4a
অ্যান্টনি

এলএফটিপি স্ক্রিপ্টটি তার লকফাইলটি পরিষ্কার করার জন্য একটি সিগনিটার চাইছে এবং 17 নিষ্ক্রিয় ঘন্টা বা আরও খারাপ ইনট []৪] পুনর্বিবেচনার ক্ষেত্রে সার্ভারের সময়সীমা বাছাইয়ের সম্ভাবনা বিবেচনা করে আমি 0 0 * * * timeout 7h /usr/local/bin/sync.shবা আমার বেশিরভাগ সমতুল্য killall -TERMবৈকল্পিকের জন্য যাব ।
রোমান সিজবোরা

4

আমি নির্দিষ্ট সময়ে সেই পরিষেবা বা স্ক্রিপ্ট "থামাতে" বা "হত্যা" করতে ক্রোন ব্যবহার করব।
আপনার কাজ বা স্ক্রিপ্ট চালানোর জন্য প্রথমে আপনার ক্রোন জব তৈরি করুন। (আপনি সহজেই একটি নতুন ক্রোন চালাতে পারেন যা একটি নাম রয়েছে এমন একটি চাকরীকে হত্যা করবে sudo pkill wget)

দ্বিতীয়ত, আপনি ক্রন্টব টাস্কগুলি কার্যকর এবং পঠনযোগ্য ফর্ম্যাটে, এর আউটপুটে দেখতে চান:

   ps -o pid,sess,cmd afx | egrep "( |/)cron( -f)?$"

তারা প্রথম লাইনে উপস্থিত হবে, এরকম কিছু:

1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290  4289         \_ /bin/bash /path/to/my/crontab/script1.sh
4295  4289             \_ /usr/bin/wget LINK

প্রথম কলামটি পিআইডি, দ্বিতীয় সেশন আইডি এবং তৃতীয়টি ক্রোন দ্বারা শুরু করা কমান্ড। আপনি সেশন আইডি ব্যবহার করে একটি নির্দিষ্ট ক্রোন টাস্ক সম্পর্কিত সমস্ত প্রক্রিয়াটি মেরে ফেলতে পারেন, সুতরাং উপরের উদাহরণে আপনার সেশন আইডি 4289 খুন করা উচিত:

   pkill -s 4289

আপনার পিকিলটি কোনও স্ক্রিপ্টে রাখতে হবে এবং এটি ক্রোন হিসাবে চালানো উচিত


প্রতিটি সময় ক্রোন কাজ চলবে কি সেশন আইডি পরিবর্তন হবে? বন্ধ এবং চালু পরে কি সম্পর্কে?
অ্যান্টনি

হ্যাঁ এটি পরিবর্তন হবে। তবে আপনি যদি এটি স্ক্রিপ্ট করেন তবে আপনি পিআইডি পেতে এবং এটিকে একটি ভেরিয়েবলের মধ্যে রাখতে পারেন। নামটি যদি প্রদর্শিত হয় তবে আপনি কেবল নামটি ব্যবহার করতে সক্ষম হতে পারেন। pkill sync.sh
ddlingo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.