освободить память после выполнения задачи в cron

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
no avatar

Автор темы
SergMir
Сообщения: 7
Зарегистрирован: 20 мар 2023, 15:36
Контактная информация:

освободить память после выполнения задачи в cron

#1

23 ноя 2023, 09:23

подскажите пожалуйста: как освобождать память после выполнения задачи. которая запущена в кроне. Вчера добавил задачу в кроне - копирование файлов, а утром память сервера почти закончилась и сервер еле ворочался, пришлось перезагружать

в кроне задача прописана так:

* * * * * /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

все работает хорошо, только память не освобождается



no avatar

Автор темы
SergMir
Сообщения: 7
Зарегистрирован: 20 мар 2023, 15:36
Контактная информация:

освободить память после выполнения задачи в cron

#4

23 ноя 2023, 09:46

х.з. откуда взялась эта шапка:)

Аватара пользователя

rogoznik
Сообщения: 10050
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

освободить память после выполнения задачи в cron

#5

23 ноя 2023, 10:10

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
Так у тебя будет запускаться задача каждую минуту. После выполнения того что в скрипте задача будет завершаться, а значит не будет жрать память
ИзображениеИзображение

no avatar

Автор темы
SergMir
Сообщения: 7
Зарегистрирован: 20 мар 2023, 15:36
Контактная информация:

освободить память после выполнения задачи в cron

#6

23 ноя 2023, 10:27

а как сделать запуск в 5 секунд?

Аватара пользователя

rogoznik
Сообщения: 10050
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

освободить память после выполнения задачи в cron

#7

23 ноя 2023, 10:36

SergMir, если правильно тебя понял - ты хочешь чтоб при запуске сервера запустился скрипт, который что-то делает каждые 5 секунд.
Тогда оставь свой скрипт как есть.
Убери задачу из cron.
И сделай systemd-unit, который будет подниматься, скажем, после поднятия сети и запускать твой скрипт. И это будет происходить единожды.
А скрипт уже будет каждые 5 секунд что-то там делать.
Как написать systemd-unit в сети полно информации, да и тут на форуме это обсуждалось ни один раз
ИзображениеИзображение

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

освободить память после выполнения задачи в cron

#8

23 ноя 2023, 15:11

Опять удаляют гланды через это самое, и жалуются - что неудобно...

SergMir, Решение которое вы привели нормально работать не будет в принципе - запуск из цикла приводит к тому, что не завершается задача и висят занятые ей ресурсы.

И здесь чтобы что-то советовать, нужно знать чем таким auto_copy_req.php занимается, что его раз в пять секунд запускать нужно. По сути - тут уже скорее постоянно работающего демона писать надо под задачу, а не скрипт дергать с такой частотой.

no avatar

Автор темы
SergMir
Сообщения: 7
Зарегистрирован: 20 мар 2023, 15:36
Контактная информация:

освободить память после выполнения задачи в cron

#9

23 ноя 2023, 15:51

Задача в том, чтобы организовать сканирование каталога каждые 5 секунд и при наличии в нем файлов - копирование в другое место. Этим скрипт и занимается

Аватара пользователя

symon2014
Сообщения: 5935
Зарегистрирован: 16 дек 2017, 21:59
Решено: 37
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 750 раз
Контактная информация:

освободить память после выполнения задачи в cron

#10

23 ноя 2023, 16:29

SergMir писал(а):
23 ноя 2023, 15:51
Задача в том, чтобы организовать сканирование каталога каждые 5 секунд и при наличии в нем файлов - копирование в другое место. Этим скрипт и занимается
Если написано без ошибок, то это самая тупая задача. Файлы там будут всегда , после первого файла. Может имеется ввиду , если появятся новые файлы , или что то в этом роде. Или не копировать а переносить.

Аватара пользователя

symon2014
Сообщения: 5935
Зарегистрирован: 16 дек 2017, 21:59
Решено: 37
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 750 раз
Контактная информация:

освободить память после выполнения задачи в cron

#11

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
Надеюсь, это вам поможет. 😊
Последний раз редактировалось пользователем 1 Dja; всего редактировалось раз: 24
Причина: bb-codes

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

освободить память после выполнения задачи в cron

#12

23 ноя 2023, 18:02

SergMir писал(а):
23 ноя 2023, 15:51
Задача в том, чтобы организовать сканирование каталога каждые 5 секунд и при наличии в нем файлов - копирование в другое место. Этим скрипт и занимается
Это не задача, а реализация ее решения.

Задача - это совокупность того, из-за чего у вас там вообще файлы появляются, куда их нужно копировать/переносить, и почему обязательно раз в 5 секунд, а не устраивает хотя бы минутный интервал.

Понимаете в чем дело. Пока я вижу что-то вроде:

- Помогите - кода я себе в ногу стреляю мне больно и кровь идет!
- А в чем ваша задача?
- Задача: Нужно выстрелить так, чтобы не больно было!

А на самом деле - комар садится на ногу, кусается - и чел его пристрелить пытается. А задача, на самом деле у него - чтобы комар не кусал. Решается, например, репеллентом. :)

no avatar

Автор темы
SergMir
Сообщения: 7
Зарегистрирован: 20 мар 2023, 15:36
Контактная информация:

освободить память после выполнения задачи в cron

#13

24 ноя 2023, 07:42

symon2014 писал(а):
23 ноя 2023, 16:29
SergMir писал(а):
23 ноя 2023, 15:51
Задача в том, чтобы организовать сканирование каталога каждые 5 секунд и при наличии в нем файлов - копирование в другое место. Этим скрипт и занимается
Если написано без ошибок, то это самая тупая задача. Файлы там будут всегда , после первого файла. Может имеется ввиду , если появятся новые файлы , или что то в этом роде. Или не копировать а переносить.
да, не копирование а перенос файлов

no avatar

Автор темы
SergMir
Сообщения: 7
Зарегистрирован: 20 мар 2023, 15:36
Контактная информация:

освободить память после выполнения задачи в cron

#14

24 ноя 2023, 07:43

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
Надеюсь, это вам поможет. 😊
спасибо!

Аватара пользователя

symon2014
Сообщения: 5935
Зарегистрирован: 16 дек 2017, 21:59
Решено: 37
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 750 раз
Контактная информация:

освободить память после выполнения задачи в cron

#15

24 ноя 2023, 08:01

SergMir писал(а):
24 ноя 2023, 07:43
спасибо!
Благодари bing с его chatGPT :hoho:
Если перенести , то вместо cp нужно mv.

Ответить

Вернуться в «Системные утилиты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя