Поскольку мы установили, что это файлы журналов, созданные cron, обходной путь - заставить скрипт PHP удалять файлы журналов во время работы. Измените activesessions_update.cron.php
на это - сначала создайте резервную копию оригинальной версии в другом каталоге!
Я предполагаю, что файлы созданы таким образом, чтобы пользователь, которого вы запускаете, выполнял сценарий, поскольку у него есть права на удаление файлов. Если это не так, это не сработает.
<?php
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);
$activeSessions = $memcache->getStats();
// Removed slightly pointless heredoc
$file_content = "<?php\n\n\ $activeSessions = {$activeSessions['curr_items']};\n\n?>";
// this would be a user-defined function
// What does the above comment mean? Are you supposed
// to replace this with some of your own code?
file_put_contents("activesessions.php", $file_content);
// ========================================================
// Everything below here is to delete old log files
// Change this to the directory where the log files end up
$logsdir = "/home/USER/";
// Get the name of this file and length of the name
$filename = basename($_SERVER['PHP_SELF']);
$namelength = strlen($filename);
// Strip any trailing slashes from $logsdir
$logsdir = rtrim($logsdir,'/\\');
// Open the logs directory
if (!$dp = opendir($logsdir)) {
trigger_error("Could not open logs directory '$logsdir' for reading, exiting...");
exit;
}
// Loop through the files in the directory
while ($file = readdir($dp)) {
if (!in_array($file,array('.','..',$filename)) && strlen($file) > $namelength && substr($file,0,$namelength) == $filename) {
// If the start of the file name is the same as this file,
// and the file name length is longer than the length of the
// name of this file, delete it.
@unlink("$logsdir/$file");
}
}
// Close the directory pointer
@closedir($dp);
?>
Полагаю, демон cron на вашем сервере настроен на перенаправление STDOUT и STDERR всех заданий cron, которые он запускает, в файл. Кажется странным, что он настроен так, как это может вызвать проблемы, как у вас. Кроме того, кажется очень странным, что он должен перенаправлять их в файлы, которые по сути имеют одно и то же имя вашего скрипта с номером в конце. Вы бы, хотя они были бы *.log
или что-то.
Это решение все равно оставит хотя бы один файл журнала одновременно, потому что вы определенно не сможете удалить файл, в который в данный момент выполняется запись.
Если это работает, вы можете безопасно скопировать / вставить тот же код (из строки комментария =====
) в любые другие файлы, которые вызываются заданиями cron и вызывают ту же проблему, если они:
- создание файлов журнала в том же каталоге, в котором находится скрипт
- единственный файл в каталоге (который вам действительно нужен), где имя файла начинается с полного имени файла скрипта