Используйте cron, потому что это лучшая и более стандартная практика. По крайней мере, если это то, что будет работать регулярно (а не то, что вы исправили за минуту). cron
это более чистый и более стандартный способ. Это также лучше, потому что он запускает оболочку отдельно от терминала - никаких проблем со случайным завершением и зависимостями от других процессов.
Что касается ресурсов: CPU: оба процесса спят - когда они спят, они не тратят впустую CPU. cron
чаще просыпается, чтобы проверить вещи, но все равно делает это (больше не для вашего процесса). И это незначительная нагрузка, большинство демонов просыпаются время от времени. Память: вы, вероятно, cron
работаете независимо от этого процесса, так что это совсем не накладные расходы. Однако cron запускает оболочку только при вызове скрипта, тогда как ваш скрипт остается загруженным в память (процесс bash со средой - несколько килобайт, если вы не загружаете все в переменные оболочки).
В общем, для ресурсов это не имеет значения.
Главное отличие, которое вы ищете, заключается в том, что
cron
он не работает постоянно. Как объяснено вman cron
:Другими словами,
cron
будет запускаться только раз в минуту, и он проверит, должен ли он быть запущен. С другой стороны, ваш спящий режим потребует одновременной работы вашей фактическойsleep
команды, вашей оболочки, вашего терминала иwhile
(или любого другого ) цикла.Даже если бы они запускали одинаковое количество процессов,
cron
было бы лучше. Это написано именно для этого людьми, которые, как правило, очень хорошо справляются со своей работой. Это должно сделать лучшую работу, чем простой цикл оболочки.источник
Разница заключается в том, что по мере добавления большего количества сценариев, которые должны находиться в спящем режиме, в конечном итоге будет возникать больше процессов, ожидающих бездействия, вместо одного процесса (cron), который активируется и запускает любые запланированные сценарии, которые затем закрываются до следующего запуска. Cron позволяет один процесс, который специализирован для своевременного запуска других сценариев, плюс cron позволяет вам относительно свободно планировать, когда что-то должно выполняться, дни недели или месяца, определенное время или только каждые 5 минут и т. Д.
* Просто видя это снова, я вспомнил о другом преимуществе cron. Все сценарии, которые запускаются периодически, находятся в одном месте, и оттуда легко проверить, когда и как часто они будут выполняться. В противном случае вы должны проверить отдельные сценарии.
источник
Уже есть хорошие и более информированные ответы, но я просто хотел отметить, что благодаря этому у
sleep
вас есть возможность заморозить процесс на переменное количество времени, скажем, в зависимости от некоторых других переменных.Если я пишу сценарий для проверки процента оставшегося заряда батареи и
notify-send
если он ниже предварительно определенного критического уровня, я могу создать сценарийsleep
для количества времени, которое является функцией текущего уровня заряда батареи в процентах, вместо проверки батареи каждые одна или две минуты с помощью cron, даже когда я знаю, что при последней проверке это было 80%.Battery_notify.sh
источник
Использование
sleep
вместоcron
одной работы может быть более эффективным. Но так как вы обычноcron
бегаете в любом случае, вы можете использовать его бесплатно или достаточно близко, что не имеет значения. Поэтому, если вы не используетеcron
встраиваемую систему, свободную от других , я бы пошелcron
.источник