Estoy impresionado de que funcione. (Para cualquier otra persona sorprendida de que una instancia pueda detenerse, consulte las notas 1 & 2.)
También puede intentar "sudo detener", ya que no tendría que ejecutar como usuario raíz, siempre y cuando el usuario cuenta que ejecuta R es capaz de ejecutar sudo. Esto es bastante común en muchas AMI en EC2.
Tenga cuidado con lo que constituye una suposición de dejar de fumar R - Créalo o no, uno puede bloquear R. Puede ser mejor tener un script separado que mire el R pid y, una vez que ese PID deje de estar activo, termine la instancia. Hacer este comando dentro de R significa que si R falla, nunca llega a la llamada para detenerse. Si lo llamas desde otra secuencia de comandos, eso también puede ser peligroso. Si conoce bien Linux, lo que está buscando es que el PID inicie R, que puede pasar a otra secuencia de comandos que compruebe ps
, digamos cada 1 segundo, y luego finaliza la instancia una vez que el PID ya no se está ejecutando.
Creo que una mejor solución es utilizar las herramientas de la API EC2 (ver: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ para la documentación) para terminar O instancias de detención. Hay una diferencia entre los dos, y es importante si su instancia tiene respaldo EBS o respaldo S3. No necesita ejecutar como root para terminar la instancia; el hecho de que tenga la clave privada y el certificado muestra a Amazon que usted es el BOSS, muy por encima del hoi polloi que simplemente tiene acceso de root en su instancia.
Dado que estas credenciales se pueden utilizar para travesuras, tenga cuidado con la ejecución de las herramientas API desde un servidor determinado, necesitará su certificado y clave privada en el servidor. Esa es una mala idea en caso de que tenga un problema de seguridad. Sería mejor enviar un mensaje a un servidor maestro y hacer que apague la instancia. Si tiene mensajería configurada de alguna manera entre las instancias, esto puede hacer todo el trabajo por usted.
Nota 1: Eric Hammond reports que el halt
sólo habrá suspender una instancia de EBS, por lo que aún tiene las tarifas de almacenamiento. Si comienza muchas de esas instancias, esto puede complicar las cosas. Tu pregunta original no está clara sobre si quieres terminar o detener una instancia.Él tiene otros buenos consejos on this page
Nota 2: A short thread on the EC2 developers forum da consejos para Linux & Usuarios de Windows.
Nota 3: Las instancias de EBS se facturan por horas parciales, incluso cuando se reinician. (Consulte this thread from the developer forum.) Tener una suspensión automática cerca de la hora puede ser útil, suponiendo que el proceso R no funciona, en caso de que uno pueda volver a realizar la tarea de esa instancia (es decir, para guardar al no reiniciar). Otras herramientas útiles a considerar: setTimeLimit
y setSessionTimeLimit
, y varias herramientas de punto de control (tengo una Q que mentions a couple). Usar un auto-kill es útil si uno tiene un código que se comporta mal.
Nota 4: Recientemente me enteré del comando shutdown
en el paquete fun
. Esto es multiplataforma. Consulte this blog post para obtener comentarios, y el código es here. Cosas peligrosas, pero podría ser útil si quieres adaptarte a Windows. No lo he probado, sin embargo.
actualización 1. Otros tres ideas:
- Usted podría utilizar
.Last()
y runLast = TRUE
para q()
y quit()
, lo que podría cerrar la instancia.
- Si usa littler o una secuencia de comandos que invoca la secuencia de comandos a través de Rscript, las mismas funciones de línea de comandos podrían ser utilizadas.
- Mi paquete favorito de hoy,
tcltk2
tiene un mecanismo de temporizador ordenado, llamado tclTaskSchedule()
que se puede utilizar para programar la ejecución de una expresión. A continuación, podría volverse loco con la ejecución de cosas justo antes de que haya transcurrido un intervalo de una hora.
¡Qué extraño! Puedo enviarte parte de mi código y si puedes averiguar cómo hacerlo * detener * detener una máquina, estaré muy feliz. :) – Iterator
¿Puedes aclarar varias cosas: (1) ¿Estás usando una instancia respaldada por EBS o S3? (Si usa EBS, ¿tiene la intención de finalizar o detener la instancia?) (2) ¿Cómo se usa R? Interactivamente, a través de una secuencia de comandos, a través de uno de estos paquetes de Hadoop, a través de "datos de usuario" de la instancia, o de algún otro modo. – Iterator
Gran extensión de 'sudo make sandwich' que incluso limpia la cocina. Bonito. –