Come posso eseguire periodicamente un comando con intervalli molto brevi e ottenere il reso?


12

Devo chiamare un comando specifico in un intervallo di circa 5 secondi. Come potrei impostare un demone / processo in esecuzione in background o qualcosa di simile per farlo? Ho guardato cronjobs, ma l'intervallo minimo sembra essere di 1 minuto. Qualsiasi consiglio è apprezzato;)

Fedora è il sistema.

EDIT il comando sarebbe un bashscript, quindi "watch" non lo farebbe credo.

Risposte:


10
(
  while true
  do
    your-command-here
    sleep 5
  done
) &
disown

a cosa serve rinnegare? e se corro senza di essa?
Hans,

@Marcel, disownrimuove l'ultimo lavoro dalla tabella dei lavori della shell, rendendolo una specie di demone, come hai chiesto. Non è un vero demone perché è ancora collegato al terminale ed è nello stesso gruppo di processi, ma continuerà a funzionare dopo aver chiuso la shell.
Juliano,

Va bene, funzionerebbe: D Solo per curiosità, come "farei" un demone?
Hans,

@Marcel il modo semplice è chiamare il demone (3) da C o altra lingua con accesso alla libreria (non da uno script di shell). Questo è il modo difficile .
Juliano,

14

Perché pensi che 'watch' non funzionerà?

$ cat periodic.sh
#!/bin/bash
echo $(date)
$ chmod +x periodic.sh

$ watch -n 5 ./periodic.sh

cosa succede se esco? lo script dovrebbe continuare a funzionare.
Hans,

Si fermerà, ma è possibile utilizzare nohup watch -n 5 ./periodic.sh > periodic.log &e archiviare l'output.
naufraghi,

per il piping usa '' quoting perché il comando "viene dato a" sh -c ", il che significa che potresti aver bisogno di usare quotazioni extra per ottenere l'effetto desiderato"
andrej

2

Forse con nohup? È progettato per consentire l'esecuzione di un lavoro dopo la chiusura della shell.

Puoi anche usare schermate.


0

Il watchcomando è appropriato nel tuo caso, vorrei utilizzare un terminale multiplexer (ad esempio tmux, schermo, ecc.) E quindi eseguire il comando utilizzando

watch -n 5 ./script.sh

In tal caso, anche se si chiude il terminale o la connessione ssh alla macchina, lo script sarebbe comunque in esecuzione.

L'unica limitazione di questo approccio è che lo script verrà eseguito ogni 5 secondi solo se ha completato la sua esecuzione in quell'intervallo di tempo.


Dal momento che l'OP ha dichiarato esplicitamente che a suo avviso watchnon lo farebbe, spiega perché la tua risposta supera questa limitazione o a quale punto ritieni che l'OP abbia sbagliato a watchnon essere idoneo per l'attività.
AdminBee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.