Last active
November 26, 2019 09:29
-
-
Save maximal/b2626f95da47ddebecdab6db5f14a12c to your computer and use it in GitHub Desktop.
Скрипт для проверки свободного места на диске
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Скрипт для проверки свободного места на диске. | |
* | |
* Запуск в кроне (каждый день в 7 утра): | |
* ``` | |
* 0 7 * * * php /path/to/check-disk-space.php | |
* ``` | |
* | |
* @author MaximAL | |
* @date 2019-11-26 | |
* @time 11:43 | |
* @since 2019-11-26 Первая версия. | |
* | |
* @copyright © MaximAL, Sijeko 2019 | |
* @link https://maximals.ru | |
* @link https://sijeko.ru | |
*/ | |
// Разделы, которые проверяем | |
$partitions = [ | |
'/', | |
'/home', | |
'/srv', | |
'/run', | |
]; | |
// Порог, меньше которого шлём уведомление | |
$gbMin = 5; | |
// Выводить ли сообщение в консоль (чтобы его отослал cron с использованием MAILTO) | |
$textOut = true; | |
// Отправлять ли сообщение самостоятельно (функцией `mail()`) | |
$mailSend = true; | |
// Получатели письма | |
$mailTo = '[email protected], [email protected]'; | |
// Тема письма (добавляем к нему имя сервера) | |
$mailSubject = '[' . gethostname() . '] Мало места на диске'; | |
// Начальный текст письма | |
$mailHeader = | |
'В этих разделах сервера `' . gethostname() . | |
'` осталось меньше ' . $gbMin . ' ГиБ свободного места:'; | |
// Поехали! | |
$timeStart = microtime(true); | |
$alerts = []; | |
foreach ($partitions as $partition) { | |
$gBytes = disk_free_space($partition) / 1024.0 / 1024.0 / 1024.0; | |
if ($gBytes < $gbMin) { | |
$alerts []= '* ' . $partition . ': ' . round($gBytes, 1) . ' ГиБ'; | |
} | |
} | |
if (count($alerts)) { | |
$message = $mailHeader . PHP_EOL . implode(PHP_EOL, $alerts) . PHP_EOL; | |
if ($mailSend) { | |
mail($mailTo, $mailSubject, $message); | |
} | |
if ($textOut) { | |
echo $message; | |
} | |
} | |
$timeDiff = microtime(true) - $timeStart; | |
//echo 'Time: ', sprintf('%.3f sec.', $timeDiff), PHP_EOL; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Красота! 😍