Страница 1 из 1
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 09:23
SergMir
подскажите пожалуйста: как освобождать память после выполнения задачи. которая запущена в кроне. Вчера добавил задачу в кроне - копирование файлов, а утром память сервера почти закончилась и сервер еле ворочался, пришлось перезагружать
в кроне задача прописана так:
* * * * * /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
все работает хорошо, только память не освобождается
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 09:24
SergMir
Red Hat EL v8.5
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 09:42
symon2014
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 09:46
SergMir
х.з. откуда взялась эта шапка:)
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 10:10
rogoznik
SergMir писал(а): ↑23 ноя 2023, 09:23
все работает хорошо, только память не освобождается
Только вот у тебя все работало очень плохо, что неудивительно. У тебя каждую минуту запускался скрипт, который в бесконечном цикле каждые 5 секунд что-то делает. Вот поэтому память и кончилась
Чтоб работало хорошо измени скрипт вот так
Код: Выделить всё
flock -n /var/tmp/lock1 -c "php /var/www/infobez-site/asukd/auto_copy_req.php"
И задачу в кроне оставь как есть, т.е.
Код: Выделить всё
* * * * * /var/www/infobez-site/asukd/copy_req.sh >> /var/log/_cron_auto_copy_req.log
Так у тебя будет запускаться задача каждую минуту. После выполнения того что в скрипте задача будет завершаться, а значит не будет жрать память
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 10:27
SergMir
а как сделать запуск в 5 секунд?
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 10:36
rogoznik
SergMir, если правильно тебя понял - ты хочешь чтоб при запуске сервера запустился скрипт, который что-то делает каждые 5 секунд.
Тогда оставь свой скрипт как есть.
Убери задачу из cron.
И сделай systemd-unit, который будет подниматься, скажем, после поднятия сети и запускать твой скрипт. И это будет происходить единожды.
А скрипт уже будет каждые 5 секунд что-то там делать.
Как написать systemd-unit в сети полно информации, да и тут на форуме это обсуждалось ни один раз
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 15:11
slant
Опять удаляют гланды через это самое, и жалуются - что неудобно...
SergMir, Решение которое вы привели нормально работать не будет в принципе - запуск из цикла приводит к тому, что не завершается задача и висят занятые ей ресурсы.
И здесь чтобы что-то советовать, нужно знать чем таким auto_copy_req.php занимается, что его раз в пять секунд запускать нужно. По сути - тут уже скорее постоянно работающего демона писать надо под задачу, а не скрипт дергать с такой частотой.
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 15:51
SergMir
Задача в том, чтобы организовать сканирование каталога каждые 5 секунд и при наличии в нем файлов - копирование в другое место. Этим скрипт и занимается
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 16:29
symon2014
SergMir писал(а): ↑23 ноя 2023, 15:51
Задача в том, чтобы организовать сканирование каталога каждые 5 секунд и при наличии в нем файлов - копирование в другое место. Этим скрипт и занимается
Если написано без ошибок, то это самая тупая задача. Файлы там будут всегда , после первого файла. Может имеется ввиду , если появятся новые файлы , или что то в этом роде. Или не копировать а переносить.
освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 17:41
symon2014
Привет, это Bing. Я могу помочь вам с написанием скрипта на bash для linux. Вот один из возможных вариантов решения вашей задачи:
Код: Выделить всё
#!/bin/bash
# Скрипт для сканирования каталога и копирования файлов
# Указать исходный и целевой каталоги
source_dir="/path/to/source/dir"
target_dir="/path/to/target/dir"
# Бесконечный цикл с задержкой в 5 секунд
while true
do
# Проверить, есть ли файлы в исходном каталоге
if [ "$(ls -A $source_dir)" ]; then
# Если есть, то скопировать их в целевой каталог
cp -v $source_dir/* $target_dir
fi
# Подождать 5 секунд
sleep 5
done
Надеюсь, это вам поможет.

освободить память после выполнения задачи в cron
Добавлено: 23 ноя 2023, 18:02
slant
SergMir писал(а): ↑23 ноя 2023, 15:51
Задача в том, чтобы организовать сканирование каталога каждые 5 секунд и при наличии в нем файлов - копирование в другое место. Этим скрипт и занимается
Это не задача, а реализация ее решения.
Задача - это совокупность того, из-за чего у вас там вообще файлы появляются, куда их нужно копировать/переносить, и почему обязательно раз в 5 секунд, а не устраивает хотя бы минутный интервал.
Понимаете в чем дело. Пока я вижу что-то вроде:
- Помогите - кода я себе в ногу стреляю мне больно и кровь идет!
- А в чем ваша задача?
- Задача: Нужно выстрелить так, чтобы не больно было!
А на самом деле - комар садится на ногу, кусается - и чел его пристрелить пытается. А задача, на самом деле у него - чтобы комар не кусал. Решается, например, репеллентом.

освободить память после выполнения задачи в cron
Добавлено: 24 ноя 2023, 07:42
SergMir
symon2014 писал(а): ↑23 ноя 2023, 16:29
SergMir писал(а): ↑23 ноя 2023, 15:51
Задача в том, чтобы организовать сканирование каталога каждые 5 секунд и при наличии в нем файлов - копирование в другое место. Этим скрипт и занимается
Если написано без ошибок, то это самая тупая задача. Файлы там будут всегда , после первого файла. Может имеется ввиду , если появятся новые файлы , или что то в этом роде. Или не копировать а переносить.
да, не копирование а перенос файлов
освободить память после выполнения задачи в cron
Добавлено: 24 ноя 2023, 07:43
SergMir
symon2014 писал(а): ↑23 ноя 2023, 17:41
Привет, это Bing. Я могу помочь вам с написанием скрипта на bash для linux. Вот один из возможных вариантов решения вашей задачи:
Код: Выделить всё
#!/bin/bash
# Скрипт для сканирования каталога и копирования файлов
# Указать исходный и целевой каталоги
source_dir="/path/to/source/dir"
target_dir="/path/to/target/dir"
# Бесконечный цикл с задержкой в 5 секунд
while true
do
# Проверить, есть ли файлы в исходном каталоге
if [ "$(ls -A $source_dir)" ]; then
# Если есть, то скопировать их в целевой каталог
cp -v $source_dir/* $target_dir
fi
# Подождать 5 секунд
sleep 5
done
Надеюсь, это вам поможет.
спасибо!
освободить память после выполнения задачи в cron
Добавлено: 24 ноя 2023, 08:01
symon2014
SergMir писал(а): ↑24 ноя 2023, 07:43
спасибо!
Благодари
bing
с его
chatGPT

Если перенести , то вместо
cp
нужно
mv
.