Задание крона уничтожает последнее выполнение крона?

Ни один не является «более правильным», чем другой; они все работают. Но если вы говорите о разделении интересов, то первый лучше подчеркивает правильное разделение.

glUniformBlockBinding изменяет программу ; это не влияет на природу объекта буфера или состояние буфера контекста. Действительно, по всем правилам этот вызов даже не должен быть в одной и той же функции ; это часть настройки программного объекта. В современном учебном пособии по GL они будут использовать layout(binding=X) для установки привязки , поэтому функция даже не появится. Для более старого кода его следует установить равным известному постоянному значению после создания программы, а затем оставить его в покое.

Таким образом, вызов функции между выделением памяти для буфера и привязкой ее к индексированной точке привязки для использования создает впечатление, что они должны вызывать glUniformBlockBinding каждый кадр, что является неправильным впечатлением.

И если говорить о неправильных впечатлениях, glBindBufferBase даже не следует вызывать туда. Остальная часть этого кода является кодом настройки буфера; это должно быть сделано только один раз, в начале заявки. glBindBufferBase должен вызываться как часть процесса рендеринга, а не как процесс установки. В хорошем приложении этот вызов не должен находиться рядом с вызовом glGenBuffers.

9
задан WhiteKnight 3 May 2012 в 13:47
поделиться

3 ответа

Я не думаю, cron убивает любые процессы. Однако cron не совсем подходит для длительных процессов. Здесь может происходить то, что ваш скрипт попирает себя при многократном выполнении. Например, оба процесса PHP могут одновременно пытаться записать в один и тот же файл.

Во-первых, убедитесь, что вы не только просматриваете журнал ошибок PHP, но также пытаетесь записать вывод из самого файла PHP. Например:

*/1 * * * * * php /path/to/convert.php & >> /var/log/convert.log

Вы также можете использовать упрощенный файл блокировки, чтобы гарантировать, что convert.php не выполняется несколько раз. Примерно так:

if (file_exists('/tmp/convert.lock')) {
    exit();
}

touch('/tmp/convert.lock');
// convert here
unlink('/tmp/convert.lock');
17
ответ дан 4 December 2019 в 10:05
поделиться

Нет, не будет. Вы можете предотвратить запуск второго процесса, создав файл блокировки, который сценарий проверяет при каждом запуске. Если файл существует, он не запускается. При необходимости это также следует использовать в сочетании с максимальным временем выполнения, чтобы один процесс не останавливал будущие исполнения на неопределенный срок. Файл блокировки может быть просто пустым текстовым файлом с именем /tmp/foo.lock.

1
ответ дан 4 December 2019 в 10:05
поделиться

cron сам по себе не остановит предыдущий экземпляр выполняющегося задания, поэтому, если есть проблема, почти наверняка что-то в вашем PHP это делает. Вам нужно будет опубликовать этот код.

3
ответ дан 4 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: