2 votos

proceso de launchd mediante aerender salidas temprano

Estoy tratando de ejecutar aerender (Después de los Efectos' de la línea de comandos renderer) a través de la launchd a renderizar un vídeo en el que un intervalo programado. El comando funciona bien en la Terminal. En launchd - incluso cuando utilizo screen -d -m ... - siempre sale temprano. Aquí está mi configuración.

Pase a la parte inferior de cosas que ya he probado.

plist para launchd:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.home.VideoGenerator</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/home/Developer/VideoGenerator/exec/render.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>StandardErrorPath</key>
    <string>/var/log/com.home.VideoGenerator.err.log</string>
    <key>StandardOutPath</key>
    <string>/var/log/com.home.VideoGenerator.out.log</string>
</dict>
</plist>

render.sh script:

#!/bin/bash
/Applications/Adobe\ After\ Effects\ CC\ 2018/aerender -project /Users/home/Developer/VideoGenerator/resource/video.aep -comp ExportMe -output /Users/home/Developer/VideoGenerator/output/video.mov -OMtemplate Output

Salida:

Aquí es lo normal de salida parece, cuando ejecuto ./render.sh desde la línea de comandos:

aerender version 15.0.1x73
PROGRESS: Launching After Effects...
PROGRESS: ...After Effects successfully launched
PROGRESS: Adding specified comp to Render Queue
PROGRESS:  4/2/18 8:41:57 AM PDT: Starting composition ExportMe.
...

Este es truncada. También salidas ajustes de composición y render de progreso, siempre con éxito. Nada es útil para este propósito.

Aquí está el registro de salida cuando lo ejecuto desde launchd:

aerender version 15.0.1x73
PROGRESS: Launching After Effects...
PROGRESS: ...After Effects successfully launched

Y eso es todo. (En realidad me estoy quedando esto en un contexto donde puedo registrar el código de salida y es siempre 0. Para este propósito he drásticamente simplificado el proyecto a lo que se ve aquí, y todavía no se ejecuta).

Cosas que he probado:

  • Set KeepAlive a true en el plist
    • Esto sólo relanza el proceso después sale
  • Agregar /dev/null como StandardInPath en el plist (como en este post)
    • Todavía sale temprano
  • Agregar -i y -c a principios de ProgramArguments (desde el mismo post como en el anterior)
    • Comando no se ejecuta
  • Set AbandonProcessGroup a true en el plist
    • Todavía sale temprano
  • Anexar & poner la tarea en segundo plano
    • Los silencios de salida
  • Lanzar aerender con screen -d -m ...
    • Usando la opción-L de la bandera y la comprobación de la sesión, el resultado es el mismo; se detiene después de aerender lanza Después de Efectos y, a continuación, sale antes de la representación.

Ejecución ps aux | grep aerender muestra más de 20 procesos que se ejecutan (probablemente de todas las veces que me he ejecutado el script), la mayoría de ellos aerendercore. Pero no de salida, no de vídeo.

¿Qué estoy haciendo mal?

2voto

skan Puntos 101

De acuerdo a este hilo en StudioSysAdmins, lo que yo estoy tratando de hacer es simplemente no es posible.

Aerender es un hack que envuelve la totalidad de la GUI basada en After Effects aplicación con una base de línea de comandos de procesamiento de la interfaz. La AE core sí todavía depende directamente del Administrador de ventanas.

Usted no será capaz de ejecutar aerender de un render manager que es se ejecuta como un servicio/demonio por esta razón. (Hay algunos hacks, como se ejecuta con privilegios elevados, que pueden band-aid parcial la solución, pero que siempre se corre en un problema, tarde o temprano, ya sea tratando de ejecutar varias instancias, o acceder a alguna fuente de los activos, o algo similar).

Si ejecuta su render manager como un proceso normal, esto desaparece, debido a que el normal proceso se ejecuta bajo el contexto de un usuario ha iniciado sesión en la consola y por lo tanto estos procesos tienen acceso a la Gestor De Windows.

He quejado de esto al AE muchas veces, pero no me gustaría mantener mi la respiración esperando para mejorar la misma en cualquier momento pronto.

-Robin Scher

Parece que voy a tener que explorar otras opciones.

2voto

Steve Evans Puntos 155

Como usted ha descubierto, aerender requiere el acceso a la Ventana de Administrador. Usted podría tratar de poner su trabajo en ~/Library/LaunchAgents que se ejecuta en la sesión del usuario, o el uso de otra herramienta de programación.

launchd Alternativa

Si un usuario se registra, o incluso rápido de usuario desactivado, puede utilizar una herramienta como Administrador de Energía para ejecutar el Gestor de ventanas que requieren secuencias de comandos y aplicaciones.

Power Manager on macOS

Escribí el Gestor de Energía, así que siéntase libre de hacer preguntas técnicas. Sugiero que en este caso, porque lo que quieren es posible gracias a la herramienta de la arquitectura.

por usuario y Administrador de ventanas de Acceso

Power Manager se ejecuta cada proceso de usuario llamado pmuser. Este proceso permite ejecutar scripts programados y tareas de un usuario específico o como el Usuario Activo – el frente de la mayoría de los usuario.

Dentro de su Administrador de Energía de eventos, buscar el medio Ambiente pop-up. Esta controles de usuario que el entorno de la shell script se ejecute. Usuario activo es el delantero más gráfica de usuario de la sesión y se tiene acceso a la Ventana de Administrador.

Power Manager scripting within the graphical user session

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X