Cron который будет запускать скрипт генерации каждую минуту, и работать в холостую даже если вдруг на сайте не окажется посетителей, это идея расточительная в плане ресурсов сервера.
В твоём случае предпочтителен что то вроде следующего алгоритма.
Клиент обращается к файлу txtgen.php
txtgen.php смотрит когда в последний раз был создан текстовый файл.
если больше минуты назад: Значит он создаёт этот файл и только потом возвращает данные из него.
Если меньше минуты назад тогда он возвращает содержимое уже существующего файла.
Если файл в процессе изменения тогда он возвращает служебное сообщение, к примеру текст "wait".
Преимущества этого подхода очевидны.
Текстовый файл формируется только тогда когда он действительно нужен, а не молотит в холостую всегда.
На клиенте скрипт приблизительно будет выглядеть так
f=function(){
$("#target").load("txtgen.php",function(){
setTimeout(f,60000);
});
}
f();
Скрипт с возможностью обработки ожидания примерно так
f=function(){
$.get("txtgen.php",function(data){
// если нас просят подождать подождём 2000мс и попробуем снова.
if (data=="wait"){
setTimeout(f,2000);
}
// если нам вернули данные то вставим их в див и заберём следующие через минуту.
else {
$("#target").html(data);
setTimeout(f,60000);
}
});
}
f();
Php в лом расписывать. Напишу псевдокодом.
$time=getFileTime();// Эту функцию пишите сами она забирает из какой нибудь таблицы данные о времени создания файла.
// файл как раз сейчас пишут, попросим клиента подождать ;)
if ($time==0) echo "wait";
// Прошло меньше минуты, значит достаточно вернуть содержимое файла.
else if ($time+60>time() ) {
// читаем файл в переменную txt;
// ....
//выводим то что прочитали
echo $txt;
// неуверен но может быть достаточно встроить файл через include, вроде должно быть быстрее чем чтение
}
// прошло больше минуты, нужно сгенирировать файл
else {
setFileTime(0);//(эту функция пишите сами) на время генерации пометим файл как находящийся в процессе перезаписи
// здесь мы генерируем файл, копия файла должна оказаться в переменной $txt, либо выводить сразу echo по строчке
// ....
setFileTime(time());//(эту функция пишите сами) после того как файл готов, сохраним в базу время создания
echo $txt;
}
//setFileTime и getFileTime это функции в которых я инкапсулировал работу с состоянием файла,
// я вижу это как сохранение и чтение из базы данных числового значения в таблице. Числовое потому что функция time
//возвращает количество секунд прошедших от какой то то там даты вроде от 1970 года )) .
PS. В сессию писать состояние файла бессмысленно во первых потому что файл общий для нескольких сессий, во вторых данные в сессии будут недоступны другому процессу этой сессии, пока будет активен процесс генерации файла. Именно по этому я пишу состояние в бд, однако это не означает что нельзя придумать другой способ хранения данных. К примеру можно черпать информацию о создании файла из файловой системы. А вот где зафиксировать факт начала записи кроме бд, я затрудняюсь ответить. Хотя можно файл переименовывать но это как то уж шибко криво. С бд как то попроще.