proceso de lanzamiento usando aerender sale temprano

2

Estoy intentando ejecutar aerender (el procesador de línea de comandos de After Effects) a través de launchd para procesar un video en un intervalo de tiempo. El comando funciona bien en la Terminal. En launchd , incluso cuando uso screen -d -m ... , siempre sale antes. Aquí está mi configuración.

Salta al final de las 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

Output:

Aquí es cómo se ve la salida normal, cuando ejecuto ./render.sh desde la línea de comando:

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.
...

Esto está truncado. También genera ajustes de composición y progreso de render, siempre exitoso. Nada útil para este propósito.

Aquí está el resultado registrado 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, estoy ejecutando esto en un contexto donde puedo registrar el código de salida y siempre es 0. Para este propósito, he simplificado drásticamente el proyecto a lo que ves aquí, y aún no se ejecuta).

Cosas que he probado:

  • Establezca KeepAlive en true en el plist
    • Esto simplemente relanza el proceso después de que sale
  • Agregue /dev/null como StandardInPath en el plist (de acuerdo con mismo post que arriba )
    • El comando no se ejecuta
  • Establezca AbandonProcessGroup en true en el plist
    • Todavía sale temprano
  • Agregue & para poner la tarea en segundo plano
    • Salida de silencios
  • Lanzar aerender con screen -d -m ...
    • Usando el indicador -L y verificando el registro, la salida es la misma; se detiene después de que aerender inicie After Effects y luego se cierra antes de renderizar.

La ejecución de ps aux | grep aerender muestra más de 20 procesos en ejecución (probablemente de todas las veces que ejecuté el script), la mayoría de ellos aerendercore . Pero no hay salida, no hay video.

¿Qué estoy haciendo mal?

    
pregunta jperl 02.04.2018 - 20:56

2 respuestas

2

(Editado / Actualizado)

Según este hilo en StudioSysAdmins , el problema que estoy encontrando es debido a aerender La confianza en el administrador de ventanas.

  

Aerender es un truco que envuelve los After Effects completamente basados en GUI   Aplicación con una interfaz de render de línea de comandos básica. El núcleo AE   En sí mismo todavía depende directamente del gestor de ventanas.   ...

- Robin Scher

Terminé evitando esto usando AppleScript ( osascript ) en la lista de propiedades de esta manera:

<?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>ProgramArguments</key>
    <array>
      <string>/usr/bin/osascript</string>
      <string>/absolute/path/to/run.applescript</string>
    </array>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

Aquí es cómo se ve run.applescript :

tell app "/Applications/Utilities/Terminal.app"
  set w to do script "/Users/home/Developer/VideoGenerator/exec/render.sh; exit 0"
  repeat
    delay 1
    if busy of w is false then exit repeat
  end repeat
  #display dialog "finished"
end tell

Le digo a launchd que use osascript para ejecutar aerender en el contexto de una ventana de Terminal. Un poco enrevesado, pero funciona!

    
respondido por el jperl 02.04.2018 - 21:22
2

Como ha descubierto, aerender requiere acceso al Administrador de ventanas . Puede intentar poner su trabajo en ~/Library/LaunchAgents , que se ejecuta en la sesión del usuario, o usar otra herramienta de programación.

Launchd Alternative

Si un usuario ha iniciado sesión o incluso se ha desconectado rápidamente, puede usar una herramienta como Power Manager para ejecutar su administrador de ventanas requiere scripts y aplicaciones.

EscribíPowerManager,asíquenodudeenhacerpreguntastécnicas.Losugieroenestecaso,porqueloquequieresesposiblegraciasalaarquitecturadelaherramienta.

Accesoporusuarioyadministradordeventanas

PowerManagerejecutaunprocesoporusuariodenominado pmuser . Este proceso le permite ejecutar secuencias de comandos y tareas programadas como usuario específico o como Usuario activo , el usuario más adelantado.

Dentro de su evento de Power Manager, busque la ventana emergente Entorno . Esto controla en qué entorno de usuario se ejecutará el script de shell. Usuario activo es la sesión de usuario más gráfica y tiene acceso al Administrador de ventanas.

    
respondido por el Graham Miln 02.04.2018 - 21:48

Lea otras preguntas en las etiquetas