LINUX.ORG.RU

Cron VS бесконечный цикл


0

1

Нужно чистить директорию каждый n минут и вместо того что бы добавить правило в крон я решил запустить бесконечный цикл.

while true; do rm blablabla; sleep 10m; done

За такое руки надо отрывать? Насколько правильно так извращаться и не аукница ли.


Ответ на: комментарий от melkor217

Ну это не критично, надо только пару дней подержать. А почему так происходит? При кроне будет такой же эффект?

hama
() автор топика
Ответ на: комментарий от nanoolinux

погрешность будет накапливаться.

while true; do rm blablabla & sleep 10m; done

Так не будет. Правда ли, что если кончается память, то скрипт может сдохнуть с ошибкой cannot allocate memory, а cron падать не будет? (Или упадет, но сам поднимется)

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Правда ли, что если кончается память, то скрипт может сдохнуть с ошибкой cannot allocate memory, а cron падать не будет?

Нужно постараться настроить oom-killer, чтобы он прибил крон

Или упадет, но сам поднимется

[место для рекламы systemd]

melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

причём здесь системд? ещё sysv init такое делать умел.

nanoolinux ★★★★
()
Ответ на: комментарий от hama

Всё равно костыльненько. Крон на часы смотрит, а не считает по 10 минут.

melkor217 ★★★★★
()
Ответ на: комментарий от hama

Получается что при операторе «&» время ожидания стартует параллельно со временем очистки?

Нууу.. да..

The Bash & (ampersand) is a builtin control operator used to fork processes. From the Bash man page, «If a command is terminated by the control operator &, the shell executes the command in the background in a subshell».

Tanger ★★★★★
()

За такое руки надо отрывать?

Думаю надо-бы оторвать.

Вы по сути изобретаете давно изобретённый крон. То есть в системе будут постоянно крутиться два крона (то-есть полтора — крон и недокрон).

Крон вполне способен сделать описанные вами действия (очистку директории) вообще без всяких скриптов. Вопрос — зачем усложнять простые вещи?

tmp2155
()

для rm лучше брать cron (или вообще logrotate). А вот для более сложного случая может и иметь смысл сделать свой маленький недо-cron внутри системы. Например для случая, startup занимает существенное время.

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

Например для случая, startup занимает существенное время.

Где-то эти миллисекунды могут иметь значение? o_O

Ну, тогда будет иметь больше значения лишняя память, отжираемая процессом цикла.

KRoN73 ★★★★★
()

Во-первых, открой для себя watch; Втрое, плюс cron в том, что может слать логи на почту и пускает точно по расписанию. В твоем случае rm при кроне рано или поздно может словить ошибку что файла нет. В-третьих, с учетом выше сказанного надо писать либо что-то сложнее с ведением логов и т.п или оставить все как есть - в данном случае любая ошибка не критична.

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от Tanger

Если такому скрипту не хватит 3мб озу, а то и меньше, то грохнется что-то более серьезное и думать нужно будет не о скрипте :D

gh0stwizard ★★★★★
()

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

«Вместо того, чтобы осиливать кронтаб» - мне кажется, так будет честнее.

не аукница ли

Да, руки надо отрывать.

thesis ★★★★★
()

Крон занимается целевой задачей -> висит в памяти.
Твой цикл дублирует целевое назначение крона -> висит в памяти.
В данном конкретном случае эти ресурсы ничтожны, и на них можно забить.
Если не программируешь ничего привязанного к системе, это задача для дома - то не страшно.

Но:
1. правила хорошего тона говорят для своих задач использовать свои инструменты (если ты не можешь сделать действительно лучший инструмент, чем есть)
2. на больших задачах подобное уже более существенно по ресурсам и злости на тебя
3. тебе не нужно следить за автозапуском твоего скрипта, при старте системы (и зазря дёргать еще один сервис), если задача повешена на крон

Spirit_of_Stallman ★★★
()

нужно впилить в cron кроме минут еще и секунды и такие вопросы отпадут

quest ★★★★
()
Ответ на: комментарий от KRoN73

Где-то эти миллисекунды могут иметь значение? o_O

Когда я сказал «стартап занимает существенное время», я имел в виду совсем не миллисекунды ;). Миллисекунды — это несущественно.

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

Когда я сказал «стартап занимает существенное время», я имел в виду совсем не миллисекунды

Стартап для bash'а сегодня занимает доли миллисекунды:

$ cd /tmp
$ echo -e "#/bin/bash\necho 123">test.sh
$ chmod +x test.sh 
$ time ./test.sh 
123

real	0m0.001s
user	0m0.001s
sys	0m0.000s

Perl — примерно столько же.

Разве что Python или PHP десятка полтора-два миллисекунд стартуют.

KRoN73 ★★★★★
()
Последнее исправление: KRoN73 (всего исправлений: 1)
Ответ на: комментарий от KRoN73

кроме перла, пыха, бидона и баша, есть еще и другие системы) и потом, стартап рантайма != стартап приложения.

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

кроме перла, пыха, бидона и баша, есть еще и другие системы)

Возвращаемся к исходной теме: «Нужно чистить директорию каждый n минут»

и потом, стартап рантайма != стартап приложения

В данном случае это одно и то же :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Возвращаемся к исходной теме: «Нужно чистить директорию каждый n минут»

Если так далеко возвращаться, то можно «пролететь» начало моего исходного комментария, которое звучало: «для rm лучше брать cron (или вообще logrotate).» ;)

Sectoid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.