Me gustaría programar un comando para que se ejecute después de reiniciar en una caja de Linux. Sé cómo hacer esto para que el comando se ejecute constantemente después de cada reinicio con una @reboot
entrada crontab, sin embargo, solo quiero que el comando se ejecute una vez. Una vez que se ejecuta, debe eliminarse de la cola de comandos para ejecutar. Básicamente estoy buscando un equivalente de Linux para RunOnce en el mundo de Windows.
En caso de que importe:
$ uname -a
Linux devbox 2.6.27.19-5-default #1 SMP 2009-02-28 04:40:21 +0100 x86_64 x86_64 x86_64 GNU/Linux
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
$ cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 0
¿Hay una manera fácil y programable de hacer esto?
linux
scheduled-task
Christopher Parker
fuente
fuente
Respuestas:
Cree una
@reboot
entrada en su crontab para ejecutar un script llamado/usr/local/bin/runonce
.Cree una estructura de directorio llamada
/etc/local/runonce.d/ran
usandomkdir -p
.Cree el script de la
/usr/local/bin/runonce
siguiente manera:Ahora coloque cualquier secuencia de comandos que desea ejecutar en el siguiente reinicio (sólo una vez) en el directorio
/etc/local/runonce.d
ychown
ychmod +x
de manera apropiada. Una vez que se haya ejecutado, lo encontrará movido alran
subdirectorio y la fecha y hora adjuntas a su nombre. También habrá una entrada en tusyslog
.fuente
man logger
.$file
variable contiene la ruta completa o solo el nombre del archivo?Realmente aprecio el esfuerzo realizado en la respuesta de Dennis Williamson . Sin embargo, quería aceptarlo como la respuesta a esta pregunta, ya que es elegante y simple:
Creo que su solución sería excelente como una característica lista para usar de una distribución de Linux.
Dicho esto, escribí mi propio guión para lograr más o menos lo mismo que la solución de Dennis. No requiere pasos de configuración adicionales y no requiere acceso de root.
Guardar esta secuencia de comandos (por ejemplo:
runonce
),chmod +x
y ejecuta:En caso de error tipográfico, puede eliminar un comando de la cola de ejecución con el indicador -r:
Usar sudo funciona de la manera que esperarías que funcione. Útil para iniciar un servidor solo una vez después del próximo reinicio.
Algunas notas:
fuente
Crear, por ejemplo
/root/runonce.sh
:Añadir a
/etc/rc.local
:fuente
Configure el script en /etc/rc5.d con un S99 y haga que se elimine después de ejecutarse.
fuente
Puede hacer esto con el
at
comando, aunque noto que no puede (al menos en RHEL 5, que probé) usarat @reboot
oat reboot
, pero puede usarat now + 2 minutes
y luegoshutdown -r now
.Esto no requiere que su sistema tarde más de 2 minutos en ejecutarse.
Puede ser útil donde desee la configuración 0, aunque prefiero que el comando 'runonce' sea un kit estándar.
fuente
atd
detenerse, su comando puede ejecutarse durante el apagado. Esto podría evitarse deteniéndoseatd
antes de eliminar el comando conatd now
y luego reiniciando.Creo que esta respuesta es la más elegante:
Coloque el script
/etc/init.d/script
y elimínelo automáticamente con la última línea:rm $0
A menos que el script sea 100% a prueba de fallas, probablemente sea inteligente manejar excepciones para evitar un ciclo de error fatal.
fuente
Solía
chkconfig
hacer que mi sistema ejecutara automáticamente un script una vez después del arranque y nunca más. Si su sistema usa ckconfig (Fedora, RedHat, CentOs, etc.) esto funcionará.Primero el guión:
run-once
/etc/init.d/
chkconfig run-once on
Cuando el sistema arranca, su script se ejecutará una vez y nunca más.
Es decir, nunca más a menos que lo desee. Siempre puede volver a habilitar el script con el
chkconfig run-once on
comando.Me gusta esta solución porque pone uno y solo un archivo en el sistema y porque el comando ejecutar una vez se puede volver a emitir si es necesario.
fuente
en los sistemas redhat y debian puedes hacerlo desde /etc/rc.local, es una especie de autoexec.bat.
fuente