Страница 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
https://itshaman.ru/news/linux/kak-opus ... at-v-linux

Но за красную шапку не в курсе.

освободить память после выполнения задачи в 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 :hoho:
Если перенести , то вместо cp нужно mv.