Sto cercando di eseguire aerender
(renderer della riga di comando di After Effects) tramite launchd
per eseguire il rendering di un video su un intervallo di tempo. Il comando funziona bene in Terminal. In launchd
- anche quando uso screen -d -m ...
- esce sempre in anticipo. Ecco la mia configurazione.
Vai al basso per le cose che ho già provato.
plist per 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:
Ecco come appare l'output normale, quando eseguo ./render.sh
dalla riga di 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.
...
Questo è troncato. Emette anche le impostazioni di composizione e renderizza i progressi, sempre con successo. Niente di utile per questo scopo.
Ecco l'output registrato quando lo eseguo da launchd
:
aerender version 15.0.1x73
PROGRESS: Launching After Effects...
PROGRESS: ...After Effects successfully launched
E questo è tutto. (In realtà sto eseguendo questo in un contesto in cui posso registrare il codice di uscita ed è sempre 0. A tale scopo ho semplificato drasticamente il progetto a ciò che vedi qui, e ancora non funziona).
Cose che ho provato:
- Imposta
KeepAlive
sutrue
nel plist- Questo riavvia semplicemente il processo dopo che è terminato
- Aggiungi
/dev/null
comeStandardInPath
nel plist (come per post )- Ancora esce presto
- Aggiungi
-i
e-c
all'inizio diProgramArguments
(da stesso post di cui sopra )- Il comando non viene eseguito
- Imposta
AbandonProcessGroup
sutrue
nel plist- Ancora esce presto
- Aggiungi
&
per mettere l'attività in background- Disattiva l'output
- Avvia
aerender
conscreen -d -m ...
- Usando il flag -L e controllando il log, l'output è lo stesso; si ferma dopo che
aerender
avvia After Effects e quindi esce prima del rendering.
- Usando il flag -L e controllando il log, l'output è lo stesso; si ferma dopo che
L'esecuzione di ps aux | grep aerender
mostra oltre 20 processi in esecuzione (probabilmente da tutte le volte in cui ho eseguito lo script), la maggior parte di loro aerendercore
. Ma nessun output, nessun video.
Che cosa sto sbagliando?