Puncte:1

Începeți lucrarea cron de la 06:05 până la 22:05 la fiecare 15 minute

drapel cn

Trebuie să rulez o lucrare cron la fiecare 15 minute, începând cu 06:05 și se termină la 22:05.

0 5/15 6-22 * * *

Următoarea sintaxă include 22:35 și 22:50.

Ai idee cum să realizezi asta? Este posibil acest lucru cu o singură linie sau trebuie să configurez mai multe?

Kernel Stearns avatar
drapel de
Este un fel de hacker, dar instinctul meu este să adaug un cronjob care rulează la 0605, care adaugă un alt cronjob care rulează ceea ce doriți la fiecare 15 minute. Apoi, adăugați o lucrare cron finală care șterge sub-cronjob la 2205.
Puncte:4
drapel pe

âCron Job" de la xmodulo este licențiat sub CC BY 2.0

*/15 6-22 * * * /path/to/script

SAU

5,20,35,50 6-22 * * * /path/to/script

Un câmp poate fi un asterisc (*), care înseamnă întotdeauna „primul-ultimul”. Sunt permise intervale de numere. Intervalele sunt două numere separate cu o cratimă. Intervalul specificat este inclusiv. De exemplu, 8-11 pentru o intrare „ore” specifică execuția la orele 8, 9, 10 și 11.

Listele sunt permise. O listă este un set de numere (sau intervale) separate prin virgule. Exemple: „1,2,5,9”, „0-4,8-12”.

Valorile treptelor pot fi utilizate împreună cu intervale.Urmărirea unui interval cu „” specifică sărituri ale valorii numărului prin interval. De exemplu, „0-23/2” poate fi folosit în câmpul ore pentru a specifica executarea comenzii la fiecare două ore (alternativa în standardul V7 este „0,2,4,6,8,10,12,14,16 ,18,20,22"). Pașii sunt, de asemenea, permisi după un asterisc, așa că dacă doriți să spuneți „la fiecare două ore”, trebuie doar să utilizați „*/2”.

Numele pot fi folosite și pentru câmpurile „lună” și „ziua săptămânii”. Folosiți primele trei litere ale unei anumite zile sau luni (cajusculele nu contează). Intervalele sau listele de nume nu sunt permise.

Câmpul „al șaselea” (restul liniei) specifică comanda care trebuie executată. Întreaga porțiune de comandă a liniei, până la un caracter newline sau %, va fi executată de /bin/sh sau de shell-ul specificat în variabila SHELL a fișierului cron. Semnele procentuale (%) din comandă, cu excepția cazului în care sunt scăpate cu backslash (), vor fi schimbate în caractere newline și toate datele de după primul % vor fi trimise la comandă ca intrare standard.

Notă: Ziua execuției unei comenzi poate fi specificată prin două câmpuri - ziua lunii și ziua săptămânii. Dacă ambele câmpuri sunt restricționate (adică, nu sunt *), comanda va fi rulată atunci când oricare câmp se potrivește cu ora curentă. De exemplu, „30 4 1,15 * 5” ar determina rularea unei comenzi la 4:30 am în zilele de 1 și 15 ale fiecărei luni, plus în fiecare vineri.

Gerrit avatar
drapel cn
5,20,35,50 6-23 * * * este mai multe alergări decât au fost întrebate, nu-i așa?
Arden Smith avatar
drapel pe
Mi-am actualizat răspunsul acum
Gerrit avatar
drapel cn
Dar aceasta va rula tot la 22:20, 22:35 și 22:50, în afară de orele cerute de afiș.
Gerrit avatar
drapel cn
De asemenea, este posibil să utilizați mai multe linii SHELL= într-un fișier cron. Fiecare linie SHELL se va aplica următoarelor linii până când există o altă linie SHELL=. Același lucru pentru setările de mediu.
Puncte:3
drapel fr

Eu personal l-aș împărți în două rânduri:

5-50/15 6-21 * * * /cale/spre/script
5 22 * ​​* * /cale/la/script

Prima linie pentru a acoperi 0605-2150, a doua - pentru rulare suplimentară la 2205.

Dacă doriți cu adevărat o căptușeală, aș opta pentru o verificare inexactă pentru a se potrivi cu posibila oră inexactă de începere a lucrării:

5-50/15 6-22 * * * [[ $(data +"\%-H\%M") -le 2210 ]] && /path/to/script
Gerrit avatar
drapel cn
Specificatorul câmpului „-” în formatul de dată pentru a evita octalul este o răsucire plăcută. De menționat că în dreapta lui -le nu ar trebui să puneți nici valori precum 0630, pentru că ar fi interpretate ca octale.
Puncte:1
drapel cn

Este posibil cu o singură cronline, dar numai cu trucuri

SHELL=/bin/bash
5-50/15 6-22 * * * [[ '2220 2235 2250' =~ "$(data +\%H\%M)" ]] || /cale/spre/script

Sau cu SH (și bash)

SHELL=/bin/sh
5-50/15 6-22 * * * cazul „$(data +\%H\%M)” în 2220|2235|2250) ;; *) /path/to/script;;esac

Rețineți că bara oblică inversă scapă pentru caracterele procentuale (%), necesare pentru crontabs.

Puncte:1
drapel cn
Bob

Sunt un puternic susținător al simplificării lucrurilor.

După cum puteți vedea din celelalte răspunsuri, faceți programe puțin mai complexe cu o singură intrare cron este posibil, dar are ca rezultat intrări cron pe care trebuie să le priviți de două ori pentru a le înțelege.

Aș încerca să evit asta și aș face următoarele:

# .---------------- minut (0 - 59)
# | .------------- oră (0 - 23)
# | | .---------- ziua lunii (1 - 31)
# | | | .------- luna (1 - 12) 
# | | | | .---- ziua săptămânii (0 - 6) (duminică=0 sau 7) 
# | | | | |
# * * * * * comanda de executat

# rulați my_batch la fiecare 15 minute, începând cu ora 06:05 și până la 22:05 (carcasa de colț) 

5/15 6-21 * * * lotul_meu
5 22 * ​​* * lotul_meu

Când programul dvs. este și mai complex și mai nepotrivit pentru a fi declarat într-un program cron simplu, soluția mea preferată este să construiesc logica în jobul batch în sine (sau un shell wrapper în jurul jobului batch).

Apoi aveți întreaga putere a limbajului dvs. de scripting preferat pentru a testa dacă toate condițiile sunt corecte pentru a executa jobul în lot sau ieșiți (cu sau fără o eroare) atunci când nu sunt.

# rulați my_batch_wrapper la fiecare 15 minute 

5/15 * * * * my_batch_wrapper

și în pseudocod my_batch_wrapper

   # nu rulați my_batch înainte de 06:05 sau după 22:05 

   dacă [ acum() < 06:05 ] ; iesirea 0 

   dacă [ acum() > 22:06 ] ; iesirea 0 

  
   /calea/la/lotul_meu 

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.