¿Cómo ejecutar un script en un momento determinado en Linux? [cerrado]

81

Tengo un archivo de texto que contiene una fecha y hora específicas. Quiero poder ejecutar un script en el momento especificado en ese archivo. ¿Cómo lograrías eso? ¿Crear otro script que se ejecute en segundo plano (una especie de demonio) y verifique cada segundo si la hora actual coincide con la hora del archivo? ¿Hay otra manera? La máquina es un servidor Linux , Debian wheezy. Gracias por adelantado

Aaron Ullal
fuente
4
¿Alguna razón por la que cron no funcionará?
Lreeder
12
¿Por qué se cierra este tema? Es una pregunta muy razonable. La búsqueda de Google te lleva a esto como el número 1 y las respuestas son bastante nerdisch. Entonces, alguien que pueda responder esto es claro, el inglés será bloqueado
Richard de Ree
2
@Richard Sospecho que la razón por la que StackOverflow está cerrando tantas preguntas como esta es para alentar a los usuarios a hacer preguntas que están fuera de tema aquí en el sitio de StackExchange apropiado. Hay bastantes sitios SE nuevos que antes no existían. Por ejemplo, hay bastantes preguntas de Vim muy útiles sobre SO que se han cerrado como fuera de tema, y ​​ahora que hay un Vi / Vim SE, esas preguntas estarían en el tema allí. Solo meditando. Sin embargo, esto todavía parece una pregunta de programación
mgarey
2
Tbh me olvido de cómo usar cron cada vez que lo aprendí, y no necesito nada avanzado.
sudo

Respuestas:

148

Mira lo siguiente:

echo "ls -l" | at 07:00

Esta línea de código ejecuta "ls -l" en un momento específico. Este es un ejemplo de ejecución de algo (un comando en mi ejemplo) en un momento específico. "at" es el comando que realmente estaba buscando. Puede leer las especificaciones aquí:

http://manpages.ubuntu.com/manpages/precise/en/man1/at.1posix.html http://manpages.ubuntu.com/manpages/xenial/man1/at.1posix.html

¡Espero eso ayude!

Antoni
fuente
2
obtener un error Can't open /var/run/atd.pid to signal atd. No atd running?alguna pista?
HappyCoding
2
Necesita el atddemonio en ejecución para usar at. En Manjaro OpenRC, puede simplemente instalar at-openrcy agregar el servicio atd daemon con: sudo rc-update add atdy comenzar con sudo rc-service atd start. Por lo general, el atpaquete ya había incluido un servicio systemd(el sistema de inicio / servicio predeterminado en varias distribuciones de Linux, incluido Ubuntu) con el que se puede iniciar sudo systemctl start atdy habilitar el inicio automático en init sudo systemctl enable atd.
Manoel Vilela
8
En mi caso, esto imprime "trabajo 6 en 2017-08-21 10:53" inmediatamente ...
Jewenile
Por cierto, mi documentación de bash describe un at -cuso. ¿Para qué sirve si la forma de ejecutar un comando es canalizarlo a std in?
Tom Russell
¿Se ejecutará este script más tarde si el sistema se apagó en ese momento?
Shrijit
18

El atcomando existe específicamente para este propósito (a diferencia del cronque está destinado a programar tareas recurrentes).

at $(cat file) </path/to/script
tripleee
fuente
1
con bash, escribirías$(< file)
glenn jackman
10

Cron es bueno para algo que se ejecutará periódicamente, como todos los sábados a las 4 a. M. También está anacron , que funciona con cortes de energía, suspensiones y otras cosas. Así como en .

Pero para una solución única, que no requiere root ni nada, puede usar la fecha para calcular los segundos desde la época del tiempo objetivo, así como el tiempo actual, luego use expr para encontrar la diferencia, y duerme tantos segundos.

Anony
fuente
10
Un attrabajo permanecerá programado incluso si la máquina se reinicia mientras tanto.
tripleee
8

Normalmente en Linux se utiliza crontabpara este tipo de tareas programadas. Pero debe especificar la hora en la que "configura el temporizador", por lo que si desea que sea configurable en el archivo, tendrá que crear algún mecanismo para hacerlo.

Pero en general, usaría por ejemplo:

30 1 * * 5 /path/to/script/script.sh

Ejecutaría el script todos los viernes a la 1:30 (AM) Aquí:

30 son minutos

1 es hora

los siguientes 2 * son day of monthy month(en ese orden) y 5es el día de la semana

julumme
fuente
2
entonces, ¿cómo activarías ese comando?
Aaron Ullal
1
Crontab Guru ( crontab.guru ) es una herramienta útil para la configuración de crontab.
Umesh .A Bhat