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,- watchin 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- watchesegue il comando.
- -n 30- L'intervallo in cui eseguire il comando. In questo caso ogni trenta secondi.
- --precise- Senza questa opzione,- watchesegue 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- watcheseguire. 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- watchin 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é- nohupviene utilizzato, impedisce l'invio dell'output a un file chiamato- nohup.out.
- &- Il- watchil 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- dateusare.- %Mè il minuto corrente,- %Sè il secondo corrente e- %Nè il nanosecondo corrente.
- >> yourprog.out- Questo reindirizza l'output del- datecomando 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.