¿Cómo ejecuto periódicamente un comando con un intervalo muy corto y obtengo el retorno?

12

Necesito llamar a un comando específico en un intervalo de aproximadamente 5 segundos. ¿Cómo configuraría un demonio / proceso ejecutándose en segundo plano o algo similar para hacerlo? Miré cronjobs, pero el intervalo mínimo parece ser de 1 minuto. Cualquier consejo es apreciado;)

Fedora es el sistema.

EDITAR el comando sería un bashscript, así que "mirar" no lo haría, creo.

Hans
fuente

Respuestas:

10
(
  while true
  do
    your-command-here
    sleep 5
  done
) &
disown
Juliano
fuente
¿para qué se desconoce? ¿Qué pasa si corro sin él?
Hans
@Marcel, disownelimina el último trabajo de la tabla de trabajos de shell, convirtiéndolo en una especie de demonio, como usted pidió. No es un demonio real porque todavía está conectado a la terminal y está en el mismo grupo de procesos, pero seguirá ejecutándose después de cerrar el shell.
Juliano
ok genial, eso funcionaría: D Solo por curiosidad, ¿cómo "haría" un demonio?
Hans
@Marcel la forma simple es llamar a daemon (3) desde C u otro lenguaje con acceso a la biblioteca (no desde un script de shell). Este es el camino difícil .
Juliano
14

¿Por qué crees que 'reloj' no funcionará?

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

$ watch -n 5 ./periodic.sh
naufraghi
fuente
¿Qué pasa si me desconecto? El script debe continuar ejecutándose.
Hans
Se detendrá, pero puede usar nohup watch -n 5 ./periodic.sh > periodic.log &y almacenar la salida.
naufraghi
para la tubería, use la cita '' porque el comando "se da a" sh -c ", lo que significa que puede necesitar una cita adicional para obtener el efecto deseado"
andrej
2

Tal vez con nohup? Está diseñado para permitir que un trabajo se ejecute después de cerrar el shell.

También puedes usar pantallas.

Christopher Mahan
fuente
0

El watchcomando es apropiado en su caso, usaría un multiplexor de terminal (por ejemplo, tmux, pantalla, etc.) y luego ejecutaría el comando usando

watch -n 5 ./script.sh

En ese caso, incluso si cierra la terminal o la conexión ssh a la máquina, el script aún se estaría ejecutando.

La única limitación de este enfoque es que el script se ejecutará cada 5 segundos solo si ha completado su ejecución dentro de ese intervalo de tiempo.

JimS
fuente
Dado que el OP declaró explícitamente que, en su opinión watch, no lo haría, explique por qué su respuesta supera esta limitación o en qué momento cree que el OP se equivocó al watchconsiderar que no es adecuado para la tarea.
AdminBee