освободить память после выполнения задачи в cron
освободить память после выполнения задачи в cron
подскажите пожалуйста: как освобождать память после выполнения задачи. которая запущена в кроне. Вчера добавил задачу в кроне - копирование файлов, а утром память сервера почти закончилась и сервер еле ворочался, пришлось перезагружать
в кроне задача прописана так:
* * * * * /var/www/infobez-site/asukd/copy_req.sh >> /var/log/_cron_auto_copy_req.log
скрипт copy_req.sh запускается каждые 5 секунд
while :; do sleep 5; flock -n /var/tmp/lock1 -c "php /var/www/infobez-site/asukd/auto_copy_req.php" & done
все работает хорошо, только память не освобождается
Red Hat EL v8.5
в кроне задача прописана так:
* * * * * /var/www/infobez-site/asukd/copy_req.sh >> /var/log/_cron_auto_copy_req.log
скрипт copy_req.sh запускается каждые 5 секунд
while :; do sleep 5; flock -n /var/tmp/lock1 -c "php /var/www/infobez-site/asukd/auto_copy_req.php" & done
все работает хорошо, только память не освобождается
Red Hat EL v8.5
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
освободить память после выполнения задачи в cron
Я не вникал глубоко в детали задачи и её решения - она недостаточно детально описана ... это можно, после уточнения, обсуждать.
Но, при самом поверхностном взгляде, у вас логическая неправильность в решении:
1. cron предназначен для того, чтобы периодически, время от времени, запускать какое-то действие...
2. действием у вас запускается задача, которая бесконечно в цикле, через каждые там 5 секунд, выводит что-то в логи...
3. cron будет, время от времени, запускать экземпляр задачи из п.2, таких (бесконечных циклических) задач будет 2, 3 ... 5 ... 100 ... штук...
4. и конечно они завалят таким бесконечным шкввалом любое дисковое пространство.
освободить память после выполнения задачи в cron
действительно так и получается.Olej писал(а): ↑23 ноя 2023, 13:37
Но, при самом поверхностном взгляде, у вас логическая неправильность в решении:
...
3. cron будет, время от времени, запускать экземпляр задачи из п.2, таких (бесконечных циклических) задач будет 2, 3 ... 5 ... 100 ... штук...
4. и конечно они завалят таким бесконечным шкввалом любое дисковое пространство.
Поэтому в /etc/crontab добавил строку:
* * * * * flock -n /tmp/lock2 -c /var/www/infobez-site/asukd/copy_req.sh
т.е. каждую минуту крон будет пытаться запустить вторую копию скрипта, если lock2 занят - то запускать не будет.
но память кеша все равно растет
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
освободить память после выполнения задачи в cron
Я этого не понял...
У вас результат выполнения скрипта, вывод перенаправляется (дописывается) в файл /var/log/_cron_auto_copy_req.log
Какой кэш (растёт)? Как вы его смотрите?
Что там должен писать ваш PHP код?
Пишет ли он действительно в stdout и не пишет ли он это (или ещё что-то) в stderr, который не перенаправляется конвейером >> ?
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
освободить память после выполнения задачи в cron
Вообще то, у вас в 1-м сообщении написано совсем другое:
освободить память после выполнения задачи в cron
- растет страничный кеш (cat /proc/meminfo)Olej писал(а): ↑23 ноя 2023, 13:56У вас результат выполнения скрипта, вывод перенаправляется (дописывается) в файл /var/log/_cron_auto_copy_req.log
Какой кэш (растёт)? Как вы его смотрите?
Что там должен писать ваш PHP код?
Пишет ли он действительно в stdout и не пишет ли он это (или ещё что-то) в stderr, который не перенаправляется конвейером >> ?
- сам php-код выполняет копирование файлов. При запуске скрипта на сервере в ручном режиме отрабатывает правильно.
- в лог результат пишет
освободить память после выполнения задачи в cron
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
освободить память после выполнения задачи в cron
Логика порочная: либо cron для запуска периодических действий (каждую минуту), либо свой бесконечный цикл: до бесконечности делать что-то каждые 5 секунд.
Что вы хотите по логике поведения?
В таком виде (с flock) у вас 1-й экземпляр скрипта, запущенный cron, будет на бесконечное время (он ведь никгдва не закаечивается?) блокировать /tmp/lock2 и все следующие попытки запуска cron будут откладываться "на потом" ... и что и как там будет переполняться - это уже только вопрос времени.
P.S. Вообще, использовать блокировки для выполнения переллельных действий (в любых языках или программных средах) - очень опасная (или сложная) практика. А использование в этом качестве flock - вдвойне.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей