¿Cuál es una manera simple de ejecutar un comando, digamos, dentro de 8 horas? Puedo pensar de esta manera:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
¿Hay una forma más "adecuada"?
¿Cuál es una manera simple de ejecutar un comando, digamos, dentro de 8 horas? Puedo pensar de esta manera:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
¿Hay una forma más "adecuada"?
Respuestas:
Puedes usar el at
comando. Los at
comandos de ejecución en un momento posterior. La at
utilidad leerá los comandos de la entrada estándar y los agrupará como en el trabajo, para ser ejecutados en un momento posterior.
Por lo general, at
se instala de manera predeterminada en Ubuntu, pero si su versión no lo incluye, instale a través de:
sudo apt-get install at
Para obtener más información, opciones, ejemplos y otros, consulte el repositorio de la página de manual de Ubuntu
Ejemplo:
at now +8 hours -f ~/myscript.sh
También puede usar las manos cortas convenientes, como tomorrow
o noon
, como en
echo "tweet fore" | at teatime
Advertencia: Esto ejecutará el comando a la izquierda de la tubería inmediatamente pero solo presentará su salida más tarde. El ejemplo también demuestra cómo puede canalizar accionesat
. at -c
es la forma en que puede examinar las acciones programadas, que puede enumerar convenientemente con su número, como con:
at -c 3
at now +8 hours -f ~/myscript.sh
at 8:00
que ejecutar el comando en un momento absoluto y batch
para "cuando parece que la computadora está inactiva"
teatime
es a las 4pm. Por algunas razones, no se menciona en manpages.ubuntu.com/manpages/raring/man1/at.1posix.html, pero está man at
aquí y en manpages.ubuntu.com/manpages/raring/en/man1/at.1.html .
gpio write 8 1
pero se ejecutó de inmediato.
Sí, puedes configurar un trabajo cron.
Por ejemplo, si ahora son las 14:39:00 y hoy es viernes 30 de agosto, puede agregar el siguiente trabajo cron (que se ejecutará después de 8 horas) en su archivo crontab usando el crontab -e
comando:
39 22 30 8 5 /path/to/mycommand.sh
Más sobre:
crontab
hasta que lo elimines. Un año después, cuando haya olvidado quién lo puso allí y por qué, se quedará rascándose la cabeza preguntándose qué hacer con el comando.
Utilice la interfaz gráfica de usuario basada en Gnome para cron
, at
y similares:
La introducción de CronHowto sugiere usar la gnome-schedule
interfaz gráfica de usuario , que es mucho mejor que escribir toda la basura en el terminal (especialmente para usuarios "promedio" de Ubuntu que no son usuarios "poderosos" * nix / bsd).
Ejecútelo utilizando el Unity Dash (u otro menú de aplicaciones) para buscar tareas programadas o en ejecución gnome-schedule
.
En los sistemas Ubuntu basados en Gnome, la herramienta Tareas programadas de Gnome (del paquete gnome-schedule) en Aplicaciones -> Herramientas del sistema proporciona una interfaz gráfica con instrucciones para usar Cron. El sitio web del proyecto está en http://gnome-schedule.sourceforge.net/ ; el software se puede instalar desde el Centro de software o escribiendo
sudo apt-get install gnome-schedule
en una terminal
Usando gnome-schedule
, para una secuencia de comandos en su directorio de inicio, se configuraría un nuevo comando "at" usando este tipo de ventana:
Descubrí una forma rápida y sucia de hacer esto antes de descubrir que at
era una cosa.
Digamos que quieres que tu script se ejecute al mediodía:
until [[ "$(date)" =~ "12:00:" ]]; do
sleep 10
done
./mycommand.sh
Digamos que quiere que se ejecute mañana al mediodía (hoy es 24 de noviembre para mí):
until [[ "$(date)" =~ "25 12:00:" ]]; do
sleep 30
done
./mycommand.sh
Actualización : Método ligeramente mejor: solo prueba los números que te interesan, usando date +FORMAT
:
until [[ $(date +%H:%M) == 21:06 ]]; do
...
at
, cron
o cualquier otra aplicación real planificador. La programación de tareas es difícil, y no es una rueda que debe reinventar.
at
.
at
es porque sus trabajos sobrevivirán a un reinicio.
nohup
+sleep
? ¿Por qué es "impropio"?