Hantera Cron-jobb med Python

I denna handledning lär du dig vikten av cron jobb och varför du behöver dem. Du ska ta en titt på python-crontab, en Python-modul för att interagera med crontab. Du lär dig att manipulera cron-jobb från ett Python-program med hjälp av python-crontab modul.

Vad är Cron?

Under systemadministration är det nödvändigt att köra bakgrundsjobb på en server för att utföra rutinuppgifter. Cron är en systemprocess som används för att utföra bakgrundsuppgifter rutinmässigt. Cron kräver en fil som heter crontab som innehåller listan över uppgifter som ska utföras vid en viss tidpunkt. Alla dessa jobb exekveras i bakgrunden vid den angivna tiden.

Om du vill visa cron-jobb som körs på ditt system, navigerar du till din terminal och skriver in:

crontab-l

Ovanstående kommando visar listan över jobb i crontab fil. För att lägga till ett nytt cron jobb till crontab, Skriv in:

crontab -e

Ovanstående kommando kommer att visa crontab fil där du kan schemalägga ett jobb. Låt oss säga att du har en fil som heter hello.py som ser ut som:

skriv ut "Hello World"

Nu, för att schemalägga ett cron-jobb för att utföra ovanstående skript för att mata ut till en annan fil, måste du lägga till följande rad kod:

50 19 * * * python hej.py >> a.txt

Ovanstående kodregel schemalägger exekveringen av filen med utdata till en fil som heter a.txt. Siffrorna före det kommando som ska utföras definierar tidpunkten för utförandet av jobbet. Tidssyntaxen har fem delar:

  1. minut
  2. timme
  3. dag i månaden
  4. månad
  5. dag i veckan

Asterisker (*) i tidssyntaxen indikerar att den körs varje gång. 

Introduktion till Python-Crontab 

python-crontab är en Python-modul som ger tillgång till cron-jobb och gör att vi kan manipulera crontab fil från Python-programmet. Det automatiserar processen att modifiera crontab filen manuellt. För att komma igång med python-crontab, du måste installera modulen med pip:

pip installera python-crontab

När du har python-crontab installeras, importera den till pythonprogrammet.

från crontab import CronTab

Skriva ditt första Cron jobb

Låt oss använda python-crontab modul för att skriva vårt första cron jobb. Skapa ett Python-program som heter writeDate.py. Inuti writeDate.py, lägg till koden för att skriva ut aktuellt datum och tid till en fil. Så här är det writeDate.py skulle titta:

importera datetime med öppen ('dateInfo.txt', 'a') som outFile: outFile.write ('\ n' + str (datetime.datetime.now ()))

Spara ovanstående ändringar.

Låt oss skapa ett annat Python-program som kommer att schemalägga writeDate.py Python program att springa i varje minut. Skapa en fil som heter scheduleCron.py.

Importera crontab modul i scheduleCron.py program.

från crontab import CronTab

Använda crontab modul, låt oss komma åt systemet crontab.

my_cron = CronTab (user = 'ditt användarnamn')

Ovanstående kommando skapar en åtkomst till systemet crontab av användaren. Låt oss iterera genom cronjobben och du ska kunna se några manuellt skapade cronjobb för det specifika användarnamnet.

för jobb i my_cron: utskriftsjobb

Spara ändringarna och försök att exekvera scheduleCron.py och du bör ha listan över cron jobb, om några, för den specifika användaren. Du borde kunna se något liknande vid genomförandet av ovanstående program:

50 19 * * * python hej.py >> a.txt # vid 5 a.m varje vecka med:

Låt oss gå vidare med att skapa ett nytt cronjobb med hjälp av crontab modul. Du kan skapa en ny cron genom att använda den nya metoden och ange kommandot som ska utföras.

jobb = my_cron.new (kommando = 'python /home/jay/writeDate.py')

Som du kan se i ovanstående kodlinje har jag angett det kommando som ska utföras när cron-jobbet exekveras. När du har det nya cron-jobbet måste du schemalägga cron-jobbet. 

Låt oss schemalägga cron-jobbet att köra varje minut. Så, med ett minuts intervall, skulle nuvarande datum och tid bifogas dateInfo.txt fil. För att schemalägga jobbet för varje minut lägger du till följande rad kod:

job.minute.every (1)

När du har planerat jobbet måste du skriva jobbet till cron-fliken.

my_cron.write ()

Här är scheduleCron.py fil:

från crontab import CronTab my_cron = CronTab (user = 'roy') jobb = my_cron.new (kommando = 'python /home/roy/writeDate.py') job.minute.every (1) my_cron.write ()

Spara ovanstående ändringar och kör Python-programmet.

python schemaCron.py

När det blir utfört, kolla på crontab fil med följande kommando:

crontab-l

Ovanstående kommando ska visa det nyligen tillagda cron-jobbet.

* * * * * python /home/roy/writeDate.py

Vänta en minut och kolla din hemkatalog och du ska kunna se dateInfo.txt fil med aktuellt datum och tidpunkt. Den här filen uppdateras varje minut och nuvarande datum och tid kommer att läggas till det befintliga innehållet.

Uppdatering av ett befintligt Cronjobb

För att uppdatera ett befintligt cronjobb måste du hitta cron-jobbet med kommandot eller genom att använda ett ID. Du kan ha en Id-uppsättning till ett cron-jobb i form av en kommentar när du skapar ett cron-jobb med python-crontab. Så här kan du skapa ett cron-jobb med en kommentar:

 job = my_cron.new (command = 'python /home/roy/writeDate.py', kommentar = "dateinfo")

Som framgår av ovanstående kod, har ett nytt cronjobb skapats med kommentaren som dateinfo. Ovanstående kommentar kan användas för att hitta cron-jobbet.

Vad du behöver göra är iterera genom alla jobb i crontab och kolla på jobbet med kommentaren dateinfo. Här är koden:

 my_cron = CronTab (user = 'roy') för jobb i my_cron: utskriftsjobb

Kontrollera efter varje jobbs kommentar med job.comment attribut.

 my_cron = CronTab (user = 'jay') för jobb i my_cron: om job.comment == 'dateinfo': utskriftsjobb

När du har jobbet, omplanera cronjobbet och skriv till cron. Här är den fullständiga koden:

från crontab import CronTab my_cron = CronTab (user = 'roy') för jobb i my_cron: om job.comment == 'dateinfo': job.hour.every (10) my_cron.write () print 'Cron job modified modified'

Spara ovanstående ändringar och kör scheduleCron.py fil. Lista objekten i crontab fil med följande kommando:

crontab-l

Du borde kunna se cron-jobbet med uppdaterad schemalagd tid.

* * / 10 * * * python /home/jay/writeDate.py # dateinfo

Rensa jobb från Crontab

python-crontab ger metoder för att rensa eller ta bort jobb från crontab. Du kan ta bort ett cronjobb från crontab baserat på schemat, kommentaren eller kommandot.

Låt oss säga att du vill rensa jobbet med kommentar dateinfo från crontab. Koden skulle vara:

från crontab import CronTab my_cron = CronTab (user = 'roy') för jobb i my_cron om job.comment == 'dateinfo': my_cron.remove (jobb) my_cron.write ()

På samma sätt, för att ta bort ett jobb baserat på en kommentar kan du direkt ringa ta bort metod på my_cron utan någon iteration. Här är koden:

my_cron.remove (kommentar = 'dateinfo')

För att ta bort alla jobb från crontab, du kan ringa ta bort alla metod.

my_cron.remove_all ()

När du gjort ändringar, skriv den tillbaka till cron med följande kommando:

my_cron.write ()

Beräkning av arbetsfrekvens

För att kontrollera hur många gånger ditt jobb utförs med python-crontab, du kan använda frekvens metod. När du har jobbet, kan du ringa metoden som heter frekvens, vilket kommer att återge antalet gånger jobbet körs på ett år.

från crontab import CronTab my_cron = CronTab (user = 'roy') för jobb i my_cron: print job.frequency ()

För att kontrollera hur många gånger jobbet körs på en timme kan du använda metoden frequency_per_hour.

my_cron = CronTab (user = 'roy') för jobb i my_cron: print job.frequency_per_hour ()

För att kontrollera arbetsfrekvensen på en dag kan du använda metoden frequency_per_day

Kontrollera jobbschema

python-crontab ger funktionaliteten att kontrollera schemat för ett visst jobb. För att detta ska fungera behöver du croniter modul som ska installeras på ditt system. Installera croniter använder pip:

pip installera croniter

När du har croniter installerat, ring schemalagsmetoden på jobbet för att få jobbschemat.

sch = job.schedule (date_from = datetime.datetime.now ())

Nu kan du få nästa jobbschema genom att använda get_next metod.

skriv ut sch.get_next ()

Här är den fullständiga koden:

importera datetime från crontab import CronTab my_crons = CronTab (user = 'jay') för jobb i my_crons: sch = job.schedule (date_from = datetime.datetime.now ()) skriv ut sch.get_next ()

Du kan även få det föregående schemat genom att använda get_prev metod.

Wrapping It Up

I denna handledning såg du hur du började använda python-crontab för åtkomst till systemet crontab från ett Python-program. Använder sig av python-crontab, Du kan automatisera den manuella processen att skapa, uppdatera och schemalägga cron-jobb. 

Har du använt python-crontab eller några andra bibliotek för åtkomst till systemet crontab? Jag skulle gärna höra dina tankar. Låt oss veta dina förslag i kommentarerna nedan.

Lär Python

Lär dig Python med vår kompletta handledning för pythonhandledning, oavsett om du bara har börjat eller du är en erfaren kodare som vill lära dig nya färdigheter.