GNU/Linux >> Linux Esercitazione >  >> Linux

Posso eseguire un cron job più frequentemente di ogni minuto?

Soluzione 1:

Candidato per il più creativo uso improprio di un comando Linux:

nohup watch -n 30 --precise yourprog >/dev/null &

Se yourprog consiste di:

date +%M.%S.%N >> yourprog.out

poi yourprog.out potrebbe essere simile a:

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

indicando un buon livello di precisione.

Ecco una spiegazione delle parti del comando:

  • nohup - Questo mantiene il comando che lo segue, watch in questo caso, dall'uscita quando il terminale esce.
  • watch - Questo programma esegue ripetutamente un comando. Normalmente la prima schermata dell'output del comando viene visualizzata ogni volta watch esegue il comando.
  • -n 30 - L'intervallo in cui eseguire il comando. In questo caso ogni trenta secondi.
  • --precise - Senza questa opzione, watch esegue il comando dopo intervallo secondi. Con esso, ogni inizio del comando inizia acceso l'intervallo, se possibile. Se questa opzione non fosse specificata nell'esempio, i tempi sarebbero sempre successivi di oltre 30 secondi ogni volta a causa del tempo necessario per avviare ed eseguire il comando (yourprog ).
  • yourprog - Il programma o la riga di comando per watch eseguire. Se la riga di comando contiene caratteri speciali per la shell (ad es. spazio o punto e virgola) dovrà essere quotata.
  • >/dev/null - Il maggiore di reindirizza l'output del comando eseguito da watch in un file, /dev/null . Quel file elimina tutti i dati scritti su di esso. Ciò impedisce che l'output venga scritto sullo schermo o, poiché nohup viene utilizzato, impedisce l'invio dell'output a un file chiamato nohup.out .
  • & - Il watch il comando viene eseguito in background e il controllo viene restituito al terminale o al processo padre.

Nota che nohup , il reindirizzamento dell'output e il & gli operatori di controllo in background non sono specifici di watch .

Ecco una spiegazione dell'esempio yourprog script:

  • date - Emette la data e/o l'ora correnti. Può anche impostarli.
  • +%M.%S.%N - Questo specifica il formato di output per date usare. %M è il minuto corrente, %S è il secondo corrente e %N è il nanosecondo corrente.
  • >> yourprog.out - Questo reindirizza l'output del date comando in un file chiamato yourprog.out . Il doppio maggiore di fa sì che l'output venga aggiunto al file a ogni invocazione anziché che il contenuto precedente venga sovrascritto.

Modifica :

Forse un'altra cosa di cui si potrebbe abusare (o forse è un uso legittimo) sono i timer di sistema.

Vedi systemd/Timers come sostituto di cron e Cron vs systemd timer.

Proverò presto a postare un esempio.

Soluzione 2:

Se la tua attività deve essere eseguita così frequentemente, cron è lo strumento sbagliato. A parte il fatto che semplicemente non avvierà i lavori così frequentemente, si rischiano anche seri problemi se l'esecuzione del lavoro richiede più tempo rispetto all'intervallo tra i lanci. Riscrivi la tua attività in modo che venga demonizzata ed eseguita in modo persistente, quindi avviala da cron se necessario (assicurandoti che non venga riavviata se è già in esecuzione).

Soluzione 3:

Cron è progettato per svegliarsi ogni minuto, quindi non è possibile farlo senza qualche hacking, ad esempio dormi come hai detto.

Soluzione 4:

* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

Non dimenticare di scrivere qualcosa nel tuo programma in modo che esca se un'istanza precedente è già in esecuzione.

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

Naturalmente, questo lascia ancora una piccola possibilità di fallimento, quindi cerca su Google una soluzione migliore applicabile al tuo ambiente.

Soluzione 5:

Puoi farlo con software di terze parti.

Un'opzione che ha funzionato bene per me è frequent-cron

Consente la precisione al millisecondo e ti dà la possibilità di posticipare l'esecuzione successiva fino a quando quella corrente non è terminata.


Linux
  1. Come eseguire Cronjobs più spesso di una volta al minuto?

  2. Eseguire un cron job su Linux ogni sei ore

  3. Linux:esegui cron job in primo piano

  4. Come eseguire cron job ogni ora e 10 min

  5. Come configurare il lavoro CRON per l'esecuzione ogni 10 secondi in Linux?

Come eseguire Cron Jobs ogni 5, 10 o 15 minuti

Come pianificare un lavoro in Cron da eseguire ogni ora in Ubuntu 20.04

Come eseguire un lavoro Crontab ogni settimana la domenica

Come posso ottenere un cron job da eseguire ogni 30 minuti?

Come posso eseguire un comando dopo l'avvio?

Come posso programmare un lavoro cron che viene eseguito ogni 10 secondi in Linux?