পাইথনে আমি কীভাবে ক্রোন শিডিয়ুলার পেতে পারি? [বন্ধ]


348

আমি পাইথনে একটি লাইব্রেরি খুঁজছি যা কার্যকারিতা সরবরাহ করবে atএবং cronপছন্দ করবে ।

আমি বাক্সে ইনস্টল হওয়া সরঞ্জামগুলির উপর নির্ভর না করে আমার বেশ খাঁটি পাইথন দ্রবণ চাই; এইভাবে আমি ক্রোনবিহীন মেশিনগুলিতে চালাচ্ছি।

যাদের সাথে অপরিচিত তাদের জন্য cron: আপনি মত প্রকাশের উপর ভিত্তি করে কার্যগুলি নির্ধারণ করতে পারেন:

 0 2 * * 7 /usr/bin/run-backup # run the backups at 0200 on Every Sunday
 0 9-17/2 * * 1-5 /usr/bin/purge-temps # run the purge temps command, every 2 hours between 9am and 5pm on Mondays to Fridays.

ক্রোন টাইম এক্সপ্রেশন সিনট্যাক্স কম গুরুত্বপূর্ণ, তবে আমি এই ধরণের নমনীয়তার সাথে কিছু পেতে চাই।

যদি বাক্সটি আমার জন্য এই কাজ করে না থাকে তবে বিল্ডিং ব্লকগুলিকে এই জাতীয় কিছু করার জন্য কোনও পরামর্শ কৃতজ্ঞতার সাথে গ্রহণ করা হবে।

সম্পাদনা আমি প্রসেস প্রবর্তন করতে আগ্রহী নই, পাইথন - পাইথন ফাংশনগুলিতে কেবল "কাজ" লিখেছি। প্রয়োজনীয়তার দ্বারা আমি মনে করি এটি একটি আলাদা থ্রেড হবে তবে ভিন্ন প্রক্রিয়াতে নয়।

এই লক্ষ্যে, আমি ক্রোন সময় প্রকাশের অভিব্যক্তিটি খুঁজছি, তবে পাইথনে।

ক্রন হয়েছে বছরের পর বছর ধরে প্রায় হয়েছে, কিন্তু আমি যতটা সম্ভব পোর্টেবল যেমন হতে চেষ্টা করছি। আমি এর উপস্থিতির উপর নির্ভর করতে পারি না।


1
আমি এটি কীভাবে করতে হয় তা জানতে চাই। প্ল্যাটফর্ম নির্দিষ্ট উপাদানগুলির উপর নির্ভর করে ক্রস প্ল্যাটফর্ম সমাধান করা আরও কার্যকর হবে।
শন

7
এটি অফ-টপিক নয়, এটি একটি খুব গুরুত্বপূর্ণ এবং দরকারী প্রশ্ন
কনার

উত্তর:


571

আপনি যদি কিছু হালকা ওজনের চেকআউট সময়সূচী খুঁজছেন :

import schedule
import time

def job():
    print("I'm working...")

schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)

while 1:
    schedule.run_pending()
    time.sleep(1)

প্রকাশ : আমি সেই লাইব্রেরির লেখক।


7
আপনার উল্লেখ করা উচিত যে আপনি এর রক্ষণাবেক্ষণকারী schedule। এটা আমার জন্য ভাল কাজ করেছে। এটি আরও সুন্দর হবে যদি এটিতে সিনট্যাক্স এবং সমর্থিত সজ্জকারের মতো ক্রোন থাকে (ক্রিথন দেখুন তবে এই লাইব্রেরিটি ব্যবহার করবেন না কারণ এটি কাজ করে না; সময়সূচীটি ভাল লেখা হয়নি বলে মনে হয়)।
টিম লুডউইনস্কি

23
চাকরিতে কোনও প্যারামিটার পাস করার কোনও উপায় আছে কি? আমি এর মতো কিছু করতে চাই: वेळापत्रक.Every ()। ঘন্টা.do (কাজ (মাইপ্রাম))
জেন স্কঙ্কওয়ারেক্স

5
वेळापत्रक.E प्रत्येक ()। ঘন্টা.do (কাজ) এই প্রতি ঘন্টার ঘন্টা চালায়? 01:00, 02:00, 03:00, ইত্যাদি? এমনকি যদি শুরুর সময়টি পুরো ঘন্টা না হয়?
swateek

1
ধরুন এই কোডটি শিডিয়ুল.পি. এই কোডটি কি স্বয়ংক্রিয়ভাবে চলবে?
কিশান

25
@ ড্যারেল-হোল্ট এবং @ জেন-স্কানকওয়ারক্স: do()ফাংশনটি অতিরিক্ত কাজের পক্ষে আপনার কাছে এটি যুক্ত করে কাজ ফাংশনে: সময়সূচি.ড্রেটহেডসস.ওআই / স্টেবল / অ্যাপি এইচটিএমএল# schedule.Job.do উদাহরণস্বরূপ, আপনি এটি করতে পারেন : schedule.every().hour.do(job, param1, param2)ল্যাম্বডা ব্যবহার করার দরকার নেই। আশা করি এটি সাহায্য করবে :)
d11er

65

আপনার ক্রোনটব নির্দিষ্ট করতে আপনি কেবলমাত্র পাইথন আর্গুমেন্ট পাসিং সিনট্যাক্স ব্যবহার করতে পারেন। উদাহরণস্বরূপ, ধরুন আমরা কোনও ইভেন্ট ক্লাসটি নীচের হিসাবে সংজ্ঞায়িত করেছি:

from datetime import datetime, timedelta
import time

# Some utility classes / functions first
class AllMatch(set):
    """Universal set - match everything"""
    def __contains__(self, item): return True

allMatch = AllMatch()

def conv_to_set(obj):  # Allow single integer to be provided
    if isinstance(obj, (int,long)):
        return set([obj])  # Single item
    if not isinstance(obj, set):
        obj = set(obj)
    return obj

# The actual Event class
class Event(object):
    def __init__(self, action, min=allMatch, hour=allMatch, 
                       day=allMatch, month=allMatch, dow=allMatch, 
                       args=(), kwargs={}):
        self.mins = conv_to_set(min)
        self.hours= conv_to_set(hour)
        self.days = conv_to_set(day)
        self.months = conv_to_set(month)
        self.dow = conv_to_set(dow)
        self.action = action
        self.args = args
        self.kwargs = kwargs

    def matchtime(self, t):
        """Return True if this event should trigger at the specified datetime"""
        return ((t.minute     in self.mins) and
                (t.hour       in self.hours) and
                (t.day        in self.days) and
                (t.month      in self.months) and
                (t.weekday()  in self.dow))

    def check(self, t):
        if self.matchtime(t):
            self.action(*self.args, **self.kwargs)

(দ্রষ্টব্য: পুরোপুরি পরীক্ষিত নয়)

তারপরে আপনার ক্রোনটবটি সাধারণ অজগর সিনট্যাক্সে হিসাবে নির্দিষ্ট করা যেতে পারে:

c = CronTab(
  Event(perform_backup, 0, 2, dow=6 ),
  Event(purge_temps, 0, range(9,18,2), dow=range(0,5))
)

এইভাবে আপনি পাইথনের আর্গুমেন্ট মেকানিক্সের সম্পূর্ণ ক্ষমতা পাবেন (অবস্থানিক এবং কীওয়ার্ড আরোগুলির মিশ্রণ করুন এবং সপ্তাহ এবং মাসের নামের জন্য প্রতীকী নাম ব্যবহার করতে পারেন)

ক্রোনটব ক্লাসটি কেবলমাত্র মিনিট ইনক্রিমেন্টে ঘুমানো এবং প্রতিটি ইভেন্টে কলিং চেক () হিসাবে সংজ্ঞায়িত হবে। (দিবালোকের সঞ্চয় সময় / সময় অঞ্চলগুলি সম্পর্কে সতর্ক থাকার জন্য সম্ভবত কিছু সূক্ষ্মতা রয়েছে)। এখানে একটি দ্রুত বাস্তবায়ন:

class CronTab(object):
    def __init__(self, *events):
        self.events = events

    def run(self):
        t=datetime(*datetime.now().timetuple()[:5])
        while 1:
            for e in self.events:
                e.check(t)

            t += timedelta(minutes=1)
            while datetime.now() < t:
                time.sleep((t - datetime.now()).seconds)

কয়েকটি বিষয় লক্ষণীয়: পাইথনের সপ্তাহের দিনগুলি / মাসগুলি শূন্য সূচীযুক্ত (ক্রোনের বিপরীতে) হয় এবং এই পরিসীমাটি সর্বশেষ উপাদানটিকে বাদ দেয়, সুতরাং "1-5" এর মতো বাক্য গঠনটি পরিসীমা (0,5) হয়ে যায় - অর্থাৎ [0,1,2, 3,4]। আপনি যদি ক্রোন বাক্য গঠনটি পছন্দ করেন তবে এটি বিশ্লেষণ করা খুব বেশি জটিল হবে না।


আপনি অনভিজ্ঞের জন্য কিছু আমদানি বিবৃতি যুক্ত করতে চাইতে পারেন। ডেটটাইম আমদানি * সময় আমদানির সময় থেকে ঘুম এবং সময় বদলানো সহ আমি সমস্ত ক্লাস একক ফাইলে রেখেছি leep দুর্দান্ত, সহজ মার্জিত সমাধান। ধন্যবাদ।
mavnn

1
শুধু ভাবছি, ক্রোনসের চেয়ে কেন এটিকে বেশি পছন্দ করা হচ্ছে? তফসিলটি কি সেই বাগি (যেহেতু ক্রোনস শিডিউল ব্যবহার করে)? নাকি এ কি সেকেলে?
ক্রেগোক্স

ধন্যবাদ ব্রায়ান, আমি আপনার সমাধানটি উত্পাদনে ব্যবহার করি এবং এটি বেশ ভালভাবে কাজ করছে। তবে অন্যরা যেমন উল্লেখ করেছে, আপনার রান কোডে একটি সূক্ষ্ম বাগ রয়েছে। এছাড়াও আমি এটি প্রয়োজনের জন্য অত্যধিক জটিল বলে মনে করি।
raph.amiard

1
এটি দুর্দান্ত, তবে এখনও প্রতি ঘন্টা, মিনিট, ইত্যাদির জন্য স্ল্যাশ স্বীকৃতি সমর্থন করে না ...
ক্রিস কোস্টন

1
আপনার নিজের ক্লাসগুলি লেখার জন্য দুর্দান্ত ধারণা, উদাহরণস্বরূপ যখন আমার কোনও সার্ভারে সুডো অ্যাক্সেস নেই এবং এভাবে না পারে pip install anything:)
কমেটসং

46

সম্ভবত প্রশ্নটি জিজ্ঞাসা করার পরেই এটি উঠে এসেছে; আমি ভেবেছিলাম আমি এটি কেবলমাত্র সম্পূর্ণতার জন্য উল্লেখ করেছি: https://apscheduler.readthedocs.org/en/latest/


অ্যাপশেডুলার অত্যন্ত বৈশিষ্ট্যযুক্ত এবং সহজেই ব্যবহারযোগ্য।
হাটসেপসুট

27

আমার অনুসন্ধানগুলিতে একটি জিনিস যা আমি দেখেছি তা হ'ল অজগরটির schedমডিউল যা আপনি যে ধরণের জিনিস খুঁজছেন তা হতে পারে।


11
শিডিউলে এখন এনট্রেবস রয়েছে () যা নিখুঁত শিডিউলিং করে।
জেরের

5
শিডিউলটি এখন পাইথন 2 এবং 3 স্টাডলিবের অংশ এবং এটি নিখুঁত শিডিয়ুলিং করে বলে আমি এটি পছন্দসই উত্তর বলে আশা করব।
মাইকেল

20

"... ক্রন্টব ফাইলগুলি পড়ার জন্য এবং লেখার জন্য এবং ক্রোনটব ফাইলগুলি স্বয়ংক্রিয়ভাবে সিস্টেম ক্রোন অ্যাক্সেস করার জন্য এবং সরাসরি একটি সরাসরি এপিআই ব্যবহার করার জন্য ক্রন্টব মডিউল। ..."

http://pypi.python.org/pypi/python-crontab

এবং এপিএসকুলার, একটি পাইথন প্যাকেজ। ইতিমধ্যে লিখিত এবং ডিবাগ করা হয়েছে।

http://packages.python.org/APScheduler/cronschedule.html


1
ওপি বিশেষত এমন কিছু জন্য অনুরোধ করেছিল যা ক্রোন ছাড়াই সিস্টেমে কাজ করবে
হামি

11

কম বেশি উপরের মত তবে একই সাথে জেনভেন্ট ব্যবহার করে :)

"""Gevent based crontab implementation"""

from datetime import datetime, timedelta
import gevent

# Some utility classes / functions first
def conv_to_set(obj):
    """Converts to set allowing single integer to be provided"""

    if isinstance(obj, (int, long)):
        return set([obj])  # Single item
    if not isinstance(obj, set):
        obj = set(obj)
    return obj

class AllMatch(set):
    """Universal set - match everything"""
    def __contains__(self, item): 
        return True

allMatch = AllMatch()

class Event(object):
    """The Actual Event Class"""

    def __init__(self, action, minute=allMatch, hour=allMatch, 
                       day=allMatch, month=allMatch, daysofweek=allMatch, 
                       args=(), kwargs={}):
        self.mins = conv_to_set(minute)
        self.hours = conv_to_set(hour)
        self.days = conv_to_set(day)
        self.months = conv_to_set(month)
        self.daysofweek = conv_to_set(daysofweek)
        self.action = action
        self.args = args
        self.kwargs = kwargs

    def matchtime(self, t1):
        """Return True if this event should trigger at the specified datetime"""
        return ((t1.minute     in self.mins) and
                (t1.hour       in self.hours) and
                (t1.day        in self.days) and
                (t1.month      in self.months) and
                (t1.weekday()  in self.daysofweek))

    def check(self, t):
        """Check and run action if needed"""

        if self.matchtime(t):
            self.action(*self.args, **self.kwargs)

class CronTab(object):
    """The crontab implementation"""

    def __init__(self, *events):
        self.events = events

    def _check(self):
        """Check all events in separate greenlets"""

        t1 = datetime(*datetime.now().timetuple()[:5])
        for event in self.events:
            gevent.spawn(event.check, t1)

        t1 += timedelta(minutes=1)
        s1 = (t1 - datetime.now()).seconds + 1
        print "Checking again in %s seconds" % s1
        job = gevent.spawn_later(s1, self._check)

    def run(self):
        """Run the cron forever"""

        self._check()
        while True:
            gevent.sleep(60)

import os 
def test_task():
    """Just an example that sends a bell and asd to all terminals"""

    os.system('echo asd | wall')  

cron = CronTab(
  Event(test_task, 22, 1 ),
  Event(test_task, 0, range(9,18,2), daysofweek=range(0,5)),
)
cron.run()

কেবলমাত্র একটি নোট যে ডেটটাইম.টাইমটাইম () বছরের সাথে শুরু হবে, মাস, দিন ... ইত্যাদি ...
ট্রে স্টাউট

9

তালিকাভুক্ত সমাধানগুলির মধ্যে একটিও কোনও জটিল ক্রোন শিডিয়ুল স্ট্রিং পার্স করার চেষ্টা করে না। সুতরাং, এখানে আমার সংস্করণ, ক্রোনাইটার ব্যবহার করে । প্রাথমিক বক্তব্য:

schedule = "*/5 * * * *" # Run every five minutes

nextRunTime = getNextCronRunTime(schedule)
while True:
     roundedDownTime = roundDownTime()
     if (roundedDownTime == nextRunTime):
         ####################################
         ### Do your periodic thing here. ###
         ####################################
         nextRunTime = getNextCronRunTime(schedule)
     elif (roundedDownTime > nextRunTime):
         # We missed an execution. Error. Re initialize.
         nextRunTime = getNextCronRunTime(schedule)
     sleepTillTopOfNextMinute()

সহায়ক রুটিনগুলি:

from croniter import croniter
from datetime import datetime, timedelta

# Round time down to the top of the previous minute
def roundDownTime(dt=None, dateDelta=timedelta(minutes=1)):
    roundTo = dateDelta.total_seconds()
    if dt == None : dt = datetime.now()
    seconds = (dt - dt.min).seconds
    rounding = (seconds+roundTo/2) // roundTo * roundTo
    return dt + timedelta(0,rounding-seconds,-dt.microsecond)

# Get next run time from now, based on schedule specified by cron string
def getNextCronRunTime(schedule):
    return croniter(schedule, datetime.now()).get_next(datetime)

# Sleep till the top of the next minute
def sleepTillTopOfNextMinute():
    t = datetime.utcnow()
    sleeptime = 60 - (t.second + t.microsecond/1000000.0)
    time.sleep(sleeptime)

কীভাবে কেউ "মৃত্যুদণ্ড কার্যকর করা" মিস করতে পারেন elif? এটিএম আমি "* * * * *"তারপরে একটি সময়সূচি ব্যবহার করছি time.sleep"" আপনার পর্যায়ক্রমিক জিনিসটি করুন "তে 1 মিনিটেরও বেশি কিছু যোগ করা if, তবে আমি যদি স্টেটমেন্টে থাকি তবে সর্বদা স্টাফটি দেখি। যখন এটি 1 মিনিটেরও বেশি সময় নেয় আমি কেবল তখন লুপটিকে হারিয়ে যাওয়া লুপটি কার্যকর করতে দেখি।
টিপিপিজেড

@ টিটিপিজেড প্রক্রিয়াটি স্থগিত করা যেতে পারে, ঘড়িটি ম্যানুয়ালি বা এনটিপি ইত্যাদির মাধ্যমে পরিবর্তন করা যেতে পারে etc.
dlamblin

7

আমি স্ক্রিপ্ট পরিবর্তন করেছি।

  1. ব্যবহার করা সহজ:

    cron = Cron()
    cron.add('* * * * *'   , minute_task) # every minute
    cron.add('33 * * * *'  , day_task)    # every hour
    cron.add('34 18 * * *' , day_task)    # every day
    cron.run()
  2. এক মিনিটের প্রথম দ্বিতীয় দিকে কাজ শুরু করার চেষ্টা করুন।

গিথুবে কোড


6

ব্রায়ান প্রস্তাবিত ক্রোনটব ক্লাস রান পদ্ধতিটির জন্য আমার কাছে একটি ছোটখাটো ফিক্স আছে

সময়টি এক সেকেন্ড পরে আউট হয়ে যায় এবং প্রতিটি মিনিটের শেষে হার্ড লুপকে এক সেকেন্ডে নিয়ে যায়।

class CronTab(object):
    def __init__(self, *events):
        self.events = events

    def run(self):
        t=datetime(*datetime.now().timetuple()[:5])
        while 1:
            for e in self.events:
                e.check(t)

            t += timedelta(minutes=1)
            n = datetime.now()
            while n < t:
                s = (t - n).seconds + 1
                time.sleep(s)
                n = datetime.now()

4

এটি করার কোনও "খাঁটি অজগর" উপায় নেই কারণ আপনার সমাধানটি চালানোর জন্য অন্য কোনও প্রক্রিয়াতে পাইথন চালু করতে হবে। প্রতিটি প্ল্যাটফর্মের প্রক্রিয়াগুলি শুরু করতে এবং তাদের অগ্রগতি নিরীক্ষণের জন্য এক বা বিশটি আলাদা উপায় থাকবে। ইউনিক্স প্ল্যাটফর্মে ক্রোন পুরানো স্ট্যান্ডার্ড। ম্যাক ওএস এক্সে এছাড়াও চালু করা হয়েছে, যা ক্রড-জাতীয় প্রবর্তনকে ওয়াচডগ কার্যকারিতার সাথে সংযুক্ত করে যা আপনার প্রক্রিয়াকে বাঁচিয়ে রাখতে পারে যদি আপনি চান তবে এটি। অজগরটি একবার চলার পরে, আপনি কাজগুলি নির্ধারণের জন্য সময়সূচী মডিউলটি ব্যবহার করতে পারেন ।


4

আমি জানি অনেক উত্তর আছে, তবে আরেকটি সমাধান হতে পারে সজ্জকারদের সাথে যাওয়া । এটি একটি নির্দিষ্ট সময়ে প্রতিদিন কোনও ফাংশনটির পুনরাবৃত্তি করার উদাহরণ। এইভাবে ব্যবহার সম্পর্কে দুর্দান্ত ধারণাটি হল যে আপনি যে ফাংশনটি নির্ধারণ করতে চান তাতে কেবল সিনট্যাকটিক চিনি যুক্ত করা দরকার :

@repeatEveryDay(hour=6, minutes=30)
def sayHello(name):
    print(f"Hello {name}")

sayHello("Bob") # Now this function will be invoked every day at 6.30 a.m

এবং শোভাকর এর মতো দেখাবে:

def repeatEveryDay(hour, minutes=0, seconds=0):
    """
    Decorator that will run the decorated function everyday at that hour, minutes and seconds.
    :param hour: 0-24
    :param minutes: 0-60 (Optional)
    :param seconds: 0-60 (Optional)
    """
    def decoratorRepeat(func):

        @functools.wraps(func)
        def wrapperRepeat(*args, **kwargs):

            def getLocalTime():
                return datetime.datetime.fromtimestamp(time.mktime(time.localtime()))

            # Get the datetime of the first function call
            td = datetime.timedelta(seconds=15)
            if wrapperRepeat.nextSent == None:
                now = getLocalTime()
                wrapperRepeat.nextSent = datetime.datetime(now.year, now.month, now.day, hour, minutes, seconds)
                if wrapperRepeat.nextSent < now:
                    wrapperRepeat.nextSent += td

            # Waiting till next day
            while getLocalTime() < wrapperRepeat.nextSent:
                time.sleep(1)

            # Call the function
            func(*args, **kwargs)

            # Get the datetime of the next function call
            wrapperRepeat.nextSent += td
            wrapperRepeat(*args, **kwargs)

        wrapperRepeat.nextSent = None
        return wrapperRepeat

    return decoratorRepeat

1

ব্রায়ানের সমাধান বেশ ভালভাবে কাজ করছে। তবে অন্যরা যেমন উল্লেখ করেছে, রান কোডে একটি সূক্ষ্ম বাগ রয়েছে। এছাড়াও আমি এটি প্রয়োজনের জন্য অত্যধিক জটিল বলে মনে করি।

রান কোডটির কারও যদি প্রয়োজন হয় তার জন্য এখানে আমার সহজ এবং কার্যকরী বিকল্প:

def run(self):
    while 1:
        t = datetime.now()
        for e in self.events:
            e.check(t)

        time.sleep(60 - t.second - t.microsecond / 1000000.0)

1

আর একটি তুচ্ছ সমাধান হবে:

from aqcron import At
from time import sleep
from datetime import datetime

# Event scheduling
event_1 = At( second=5 )
event_2 = At( second=[0,20,40] )

while True:
    now = datetime.now()

    # Event check
    if now in event_1: print "event_1"
    if now in event_2: print "event_2"

    sleep(1)

এবং ক্লাস আকক্রন.এটি হ'ল:

# aqcron.py

class At(object):
    def __init__(self, year=None,    month=None,
                 day=None,     weekday=None,
                 hour=None,    minute=None,
                 second=None):
        loc = locals()
        loc.pop("self")
        self.at = dict((k, v) for k, v in loc.iteritems() if v != None)

    def __contains__(self, now):
        for k in self.at.keys():
            try:
                if not getattr(now, k) in self.at[k]: return False
            except TypeError:
                if self.at[k] != getattr(now, k): return False
        return True

1
একাধিক প্রশ্নের উত্তর এবং অনুলিপি / বয়লারপ্লেট পোস্ট করার সময় সতর্ক থাকুন, এগুলি সম্প্রদায় দ্বারা "স্প্যামি" হিসাবে চিহ্নিত করা হয়। আপনি যদি এটি করছেন তবে এর অর্থ সাধারণত প্রশ্নগুলি হ'ল অনুলিপিগুলি হয় তবে
কেভ

1

যদি আপনি কোনও বিতরণকারী শিডিয়ুলারের সন্ধান করে থাকেন তবে আপনি https://github.com/sherink ুরি/mani চেক করতে পারেন - এটির জন্য আবার প্রয়োজন তবে এটি আপনি যা খুঁজছেন তা নাও হতে পারে। (মনে রাখবেন যে আমি লেখক) এটি একাধিক নোডে ঘড়ি চালিয়ে দোষ-সহনশীলতা নিশ্চিত করতে নির্মিত হয়েছিল।


0

এরকম কিছু ইতিমধ্যে বিদ্যমান কিনা তা আমি জানি না। সময়, তারিখের সময় এবং / অথবা ক্যালেন্ডার মডিউলগুলির সাথে আপনার নিজের লেখা সহজ হবে, দেখুন http://docs.python.org/library/time.html

অজগর সমাধানের একমাত্র উদ্বেগ হ'ল আপনার কাজটি সর্বদা চলমান হওয়া দরকার এবং রিবুট হওয়ার পরে সম্ভবত স্বয়ংক্রিয়ভাবে "পুনরুত্থিত" হওয়া দরকার , যার জন্য আপনাকে সিস্টেম নির্ভর সমাধানগুলির উপর নির্ভর করতে হবে।


3
আপনার নিজের রোল একটি বিকল্প - যদিও সেরা কোড কোড আপনি লিখতে হবে না। পুনরুত্থান, আমি মনে করি এমন কিছু যা আমার বিবেচনার প্রয়োজন হতে পারে।
জামেশ

0

আপনি পাইক্লাউডের [1] ক্রোনস [2] পরীক্ষা করে দেখতে পারেন তবে মনে রাখবেন যে আপনার কাজগুলি আপনার নিজের মেশিনে চলবে না। এটি এমন একটি পরিষেবা যা আপনি মাসে 20 ঘন্টাের বেশি গণনা সময় ব্যবহার করলে আপনাকে অর্থ প্রদান করতে হবে।

[1] http://www.picloud.com

[2] http://docs.picloud.com/cron.html


0

সার্ভারে ক্রন্টাবের পদ্ধতি।

পাইথন ফাইলের নাম হ্যালো.পি

পদক্ষেপ 1: একটি sh ফাইল তৈরি করুন নাম s.sh দিন

পাইথন 3 / হোম / বুন্টু / শৈর্য্য / ফোল্ডার / শেলো.পিটি> / হোম / বুন্টু / শৌর্য / ফোল্ডার / লগ.টেক্সট 2> & 1

পদক্ষেপ 2: ক্রন্টব সম্পাদক খুলুন

crontab -e

স্টিপি 3: সময়সূচির সময় যুক্ত করুন

ক্রন্টব ফর্ম্যাটিং ব্যবহার করুন

2 * * * * সুডো শ / হোম / বুন্টু / শৌর্য্য / ফোল্ডার / এস.এসএস

এই ক্রোনটি "2 মিনিটে 2" চলবে


0

পাইকারন প্যাকেজ কীভাবে এই সমস্যা সমাধান করে তা আমি পছন্দ করি ।

import pycron
import time

while True:
    if pycron.is_now('0 2 * * 0'):   # True Every Sunday at 02:00
        print('running backup')
    time.sleep(60)

1
এটি কোনও ভাল ধারণা নয়, কারণ আপনার কোড "মুদ্রণ ('চলমান ব্যাকআপ')" পুরো 5 মিনিটের ব্যবধানে পুরো মিনিট চালু করবে। সুতরাং এই ক্ষেত্রে বিলম্ব 60 সেকেন্ড হওয়া উচিত।
n158

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