Я создал очень простую страницу монитора фермы рендеринга для After Effects, используя сочетание действий MacOS Automator, некоторых текстовых файлов журнала, некоторого JavaScript и некоторых php.
Действие Automator принимает выбранныйФайл проекта After Effects и запускает для него команду aerender несколько раз (по одному для каждого ядра ЦП) и выводит серию отфильтрованных текстовых файлов (по одному для каждого экземпляра aerender), отправляя по трубопроводу grep --line-buffered
и просматривая только определенные строки (например,«Начало | Закончено | Общее время истекло». Эта часть работает нормально.
У меня есть простая html-страница, которая отслеживает эти файлы журнала в режиме реального времени и передает их на страницу, используя javascript…
<!DOCTYPE html>
<html>
<head>
<title>Render Barn</title>
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Expires" content="-1">
<style>
body {
background-color: black;
color: #00ff00;
font-family: "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
font-size: 10px;
font-style: bold;
white-space: pre-wrap;
}
</style>
<script language="JavaScript" src="https://code.jquery.com/jquery-3.4.1.js"></script>
<script type="text/javascript">
window.setInterval(function(){
$.get('./Render_Barn_1.txt',
function(data){
$('#Render_Barn_1').html(data);
}
);
$.get('./Render_Barn_2.txt',
function(data){
$('#Render_Barn_2').html(data);
}
);
$.get('./Render_Barn_3.txt',
function(data){
$('#Render_Barn_3').html(data);
}
);
$.get('./Render_Barn_4.txt',
function(data){
$('#Render_Barn_4').html(data);
}
);
$.get('./Render_Barn_5.txt',
function(data){
$('#Render_Barn_5').html(data);
}
);
$.get('./Render_Barn_6.txt',
function(data){
$('#Render_Barn_6').html(data);
}
);
},1000);
</script>
<script type="text/javascript"> // Delete Logs button
$(document).ready(function(){
$('.button').click(function(){
var clickBtnValue = $(this).val();
var ajaxurl = 'delete_logs.php',
data = {'action': clickBtnValue};
$.post(ajaxurl, data, function (response) {
});
});
});
</script>
</head>
<body>
<b>Render Barn CPU 1</b>
<div id="Render_Barn_1"></div>
<br>
<b>Render Barn CPU 2</b>
<div id="Render_Barn_2"></div>
<br>
<b>Render Barn CPU 3</b>
<div id="Render_Barn_3"></div>
<br>
<b>Render Barn CPU 4</b>
<div id="Render_Barn_4"></div>
<br>
<b>Render Barn CPU 5</b>
<div id="Render_Barn_5"></div>
<br>
<b>Render Barn CPU 6</b>
<div id="Render_Barn_6"></div>
<input type="submit" class="button" value="Delete Logs" onClick="refreshPage()"/>
<script type="text/javascript"> // Refresh Page after deleting logs
function refreshPage(){
window.location.reload(true);
}
</script>
</body>
</html>
delete_logs.php У меня также есть ссылка на php, которая удаляет файлы журнала с помощью кнопки на веб-странице…
<?php
if (isset($_POST['action'])) {
switch ($_POST['action']) {
case 'Delete Logs':
delete();
break;
}
}
function delete() {
echo shell_exec('rm /Users/server/Logs/Render_Barn_*.txt');
exit;
}
?>
Render_Barn_1.txt Это пример одного из файлов журнала…
PROGRESS: 9/29/19 4:37:39 AM PDT: Starting composition 163 Ralph Sled Across America MP v4.
PROGRESS: 9/29/19 4:39:22 AM PDT: Finished composition 163 Ralph Sled Across America MP v4.
PROGRESS: Total Time Elapsed: 1 Min, 44 Sec
Снимок экрана веб-страницы в действии Как видите, все работаетотлично… до тех пор, пока я не удаляю логи (используя кнопку или сам Finder). Страница ненадолго обновится, на ней не будет отображаться логов, но затем снова появятся логи «зомби». Я говорю «зомби», потому что они как-то возвращаются из мертвых. В папке журналов просто ничего . Мой javascript для обновления страницы явно не выполняет всю работу.
Не работает принудительное обновление в браузере. Единственный способ заставить его обновиться правильно - это удалить кеш браузера. Есть идеи, где я ошибся?
РЕДАКТИРОВАТЬ -
Я также только что попробовал это (и вариант с $(".log_output").empty();
), что снова заставило их ненадолго исчезнуть, но они возвращаются ...
<b>Render Barn CPU 1</b>
<div class="log_output" id="Render_Barn_1"></div>
<br>
<b>Render Barn CPU 2</b>
<div class="log_output" id="Render_Barn_2"></div>
<br>
<b>Render Barn CPU 3</b>
<div class="log_output" id="Render_Barn_3"></div>
<br>
<b>Render Barn CPU 4</b>
<div class="log_output" id="Render_Barn_4"></div>
<br>
<b>Render Barn CPU 5</b>
<div class="log_output" id="Render_Barn_5"></div>
<br>
<b>Render Barn CPU 6</b>
<div class="log_output" id="Render_Barn_6"></div>
<input id="delete_logs" type="submit" class="button" value="Delete Logs" onClick="refreshPage()"/>
<script type="text/javascript">
function refreshPage(){
$(".log_output").html("");
}
</script>
Кроме того, $(".log_output").remove()
работает , но это слишком тяжело, так как удаляет класс, не вызывая дальнейших обновлений. И как только я обновлю страницу, все журналы зомби вернутся снова. Также попытался удалить PHP, который не имел никакого значения. Я предполагаю, что .get … function(data)
как-то как-то держится за старые данные?